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

如何在WooCommerce订单视图新增列并显示自定义订单项元键值

解决WooCommerce订单列表无法显示配送日期自定义元键的问题

问题描述

已成功在WooCommerce订单列表新增「配送日期」列,但无法读取由WooCommerce Product Add-Ons Ultimate插件添加的自定义元键_Choose Date的值,所有订单均返回提示“Meta key is wrong or not found for the order items”。

排查与解决方法

1. 确认真实元键名称

插件存储附加字段时可能会自动修改元键格式(比如大小写转换、空格替换为下划线),可通过以下方式确认真实键名:

  • 查看数据库wp_woocommerce_order_itemmeta表,找到对应订单的商品元数据,核对配送日期的元键
  • 临时在代码中加入调试代码,输出所有商品元键:
    // 在遍历订单商品的循环内添加
    foreach($item->get_meta_data() as $meta){
        echo $meta->key . '<br>';
    }
    

2. 适配插件的元数据存储格式

Product Add-Ons Ultimate通常会将附加选项以数组或特定前缀元键存储,修改代码如下:

function custom_shop_order_column( $columns ) {
    // 新增配送日期列
    $columns['delivery_date'] = __( '配送日期', 'woocommerce' ); 
    return $columns;
}
add_filter( 'manage_edit-shop_order_columns', 'custom_shop_order_column', 10, 1 );

// 填充列内容
function custom_shop_order_list_column_content( $column, $post_id ) {
    if ( $column !== 'delivery_date' ) return;

    $order = wc_get_order( $post_id );
    if ( ! is_a( $order, 'WC_Order' ) ) return;

    $delivery_date_arr = array();
    
    // 遍历订单商品
    foreach ( $order->get_items() as $item ) {
        // 尝试原元键
        $delivery_date = $item->get_meta( '_Choose Date' );
        
        // 尝试小写无空格的键名
        if( empty($delivery_date) ){
            $delivery_date = $item->get_meta( 'choose_date' );
        }
        
        // 尝试读取插件的附加选项数组
        if( empty($delivery_date) ){
            $addons = $item->get_meta( '_product_addons' );
            if( is_array($addons) ){
                foreach($addons as $addon){
                    if( isset($addon['name']) && $addon['name'] === 'Choose Date' ){
                        $delivery_date = $addon['value'];
                        break;
                    }
                }
            }
        }

        if ( ! empty( $delivery_date ) ) {
            $delivery_date_arr[] = $delivery_date;
        }
    }
    
    if ( ! empty( $delivery_date_arr ) ) {
        echo '<ul>';
        echo '<li>' . implode( '</li><li>', $delivery_date_arr ) . '</li>';
        echo '</ul>';
    } else {
        echo __( '未设置配送日期', 'woocommerce' );
    }
}
add_action( 'manage_shop_order_posts_custom_column' , 'custom_shop_order_list_column_content', 10, 2 );

3. 尝试读取订单级别元数据

如果插件将配送日期存储在订单级而非商品级,改用以下代码:

function custom_shop_order_list_column_content( $column, $post_id ) {
    if ( $column !== 'delivery_date' ) return;

    $order = wc_get_order( $post_id );
    if ( ! is_a( $order, 'WC_Order' ) ) return;

    $delivery_date = $order->get_meta( '_Choose Date' );
    
    if ( ! empty( $delivery_date ) ) {
        echo $delivery_date;
    } else {
        echo __( '未设置配送日期', 'woocommerce' );
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:02:51