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

WooCommerce后台订单列表自定义列无法显示数据求助

修复WooCommerce订单列表自定义列不显示数据的问题

你的代码存在几个关键错误,导致自定义列无法正常显示数据,以下是问题分析和修正方案:

问题点拆解

  1. 列名与判断逻辑不匹配

    • 你注册的列键是meeting_points,但判断列名时用了'Meeting_Points',大小写和下划线的差异导致触发条件不成立
    • 回调函数名也存在大小写不一致问题:add_action指定的是display_meeting_points_column,但实际定义的函数是display_Meeting_Points_column
  2. 元数据获取函数错误

    • 错误使用wc_get_order_meta_keys(),这个函数的作用是获取订单所有元数据的键列表,而非获取具体元值。正确的做法是使用$order->get_meta()或wc_get_order_meta()
  3. 缺少第二个自定义列的处理

    • 原代码仅处理了“Meeting Points”列,未添加“Meeting Date&Time”列的注册和内容输出逻辑

修正后的完整代码

// 注册两个自定义订单列
add_filter('manage_edit-shop_order_columns', 'add_custom_order_columns');
function add_custom_order_columns($columns) {
    // 在order_date列前插入自定义列
    $insert_position = array_search('order_date', array_keys($columns));
    $columns = array_merge(
        array_slice($columns, 0, $insert_position, true),
        array(
            'meeting_points' => __('Meeting Points', 'text-domain'),
            'meeting_datetime' => __('Meeting Date&Time', 'text-domain')
        ),
        array_slice($columns, $insert_position, null, true)
    );
    return $columns;
}

// 输出自定义列内容
add_action('manage_shop_order_posts_custom_column', 'display_custom_order_columns_content', 20, 2);
function display_custom_order_columns_content($column, $post_id) {
    $order = wc_get_order($post_id);
    if (!$order) return;

    switch ($column) {
        case 'meeting_points':
            // 这里的'MeetingPoints'要和你存储订单元数据时的键完全一致
            $meeting_points = $order->get_meta('MeetingPoints');
            echo !empty($meeting_points) ? esc_html($meeting_points) : esc_html__('Not Available', 'text-domain');
            break;

        case 'meeting_datetime':
            // 对应存储"Meeting Date&Time"的元数据键,需根据实际情况调整
            $meeting_datetime = $order->get_meta('MeetingDateTime');
            if (!empty($meeting_datetime)) {
                // 如果存储的是时间戳,可格式化显示:echo esc_html(date('Y-m-d H:i:s', $meeting_datetime));
                echo esc_html($meeting_datetime);
            } else {
                echo esc_html__('Not Available', 'text-domain');
            }
            break;
    }
}

注意事项

  • 确认MeetingPoints和MeetingDateTime是你存储订单元数据时使用的准确键名,如果实际键名不同,需对应修改代码中的参数
  • 如果存储的是时间戳格式的日期,可使用date()函数将其格式化为用户友好的显示样式
  • 代码可添加到当前主题的functions.php文件,或封装为自定义插件使用

内容的提问来源于stack exchange,提问作者Q n Z Family

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 12:45:02