You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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),可以通过以下方式确认实际键名:

  1. 安装WooCommerce官方的"查看订单项元数据"插件
  2. 直接查看数据库wp_woocommerce_order_itemmeta表中的记录

内容的提问来源于stack exchange,提问作者Gery

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 03:22:31