如何在WooCommerce后台订单列表的订单状态列显示订单项元键值?
解决WooCommerce后台订单列表显示Product Addon订单项元值的问题
我使用WooCommerce和Automattic付费插件Product Addon,该插件会向订单项添加元值。现在想在后台订单列表中显示指定的2个及以上元键值(比如Topup: Salami、Oil: chilli),当前代码能显示数量和产品名称,但订单项元值无法正常显示。
原代码存在两个核心问题:
$item->get_meta()返回的是数组类型,直接echo会输出Array而非实际元值内容- 未针对Product Addon生成的元数据做适配或筛选处理
以下是两种可行的解决思路及修正代码:
方法1:显示所有Product Addon附加选项
使用WooCommerce内置的get_formatted_meta_data()方法,可直接获取订单项的格式化附加数据(包含Product Addon生成的选项),无需手动处理数组:
add_action('manage_shop_order_posts_custom_column', 'orders_list_preview_items', 20, 2 ); function orders_list_preview_items($column, $post_id) { global $the_order; if ('order_status' === $column) { echo '<ul class="orders-list-items-preview">'; foreach($the_order->get_items() as $item) { $name = $item->get_name(); $qty = $item->get_quantity(); // 获取格式化后的订单项元数据(自动包含Product Addon选项) $formatted_meta = $item->get_formatted_meta_data('', true); $meta_html = ''; if (!empty($formatted_meta)) { $meta_parts = []; foreach ($formatted_meta as $meta) { // 过滤系统自带的下划线前缀元数据(可选) if (!str_starts_with($meta->key, '_')) { $meta_parts[] = $meta->display_key . ': ' . $meta->display_value; } } $meta_html = ' | ' . implode(', ', $meta_parts); } echo "<li><label>$qty</label> $name$meta_html</li>"; } echo '</ul>'; } }
方法2:只显示指定的元键值
如果仅需要展示Topup、Oil这类特定元键,可直接通过键名精准获取:
add_action('manage_shop_order_posts_custom_column', 'orders_list_preview_items', 20, 2 ); function orders_list_preview_items($column, $post_id) { global $the_order; if ('order_status' === $column) { echo '<ul class="orders-list-items-preview">'; // 定义需要显示的目标元键 $target_meta_keys = ['Topup', 'Oil']; foreach($the_order->get_items() as $item) { $name = $item->get_name(); $qty = $item->get_quantity(); $meta_html = ''; $meta_parts = []; foreach ($target_meta_keys as $key) { $meta_value = $item->get_meta($key); // 仅当元值存在时添加到显示列表 if (!empty($meta_value)) { $meta_parts[] = "$key: $meta_value"; } } if (!empty($meta_parts)) { $meta_html = ' | ' . implode(', ', $meta_parts); } echo "<li><label>$qty</label> $name$meta_html</li>"; } echo '</ul>'; } }
补充说明
如果通过$item->get_meta($key)无法获取到值,可能是Product Addon的元键带有特定前缀(比如_product_addon_topup),可以通过以下方式确认实际键名:
- 安装WooCommerce官方的"查看订单项元数据"插件
- 直接查看数据库
wp_woocommerce_order_itemmeta表中的记录
内容的提问来源于stack exchange,提问作者Gery
相关产品推荐
相关产品推荐

