WooCommerce后台订单列表自定义列无法显示数据求助
修复WooCommerce订单列表自定义列不显示数据的问题
你的代码存在几个关键错误,导致自定义列无法正常显示数据,以下是问题分析和修正方案:
问题点拆解
列名与判断逻辑不匹配
- 你注册的列键是
meeting_points,但判断列名时用了'Meeting_Points',大小写和下划线的差异导致触发条件不成立 - 回调函数名也存在大小写不一致问题:
add_action指定的是display_meeting_points_column,但实际定义的函数是display_Meeting_Points_column
- 你注册的列键是
元数据获取函数错误
- 错误使用
wc_get_order_meta_keys(),这个函数的作用是获取订单所有元数据的键列表,而非获取具体元值。正确的做法是使用$order->get_meta()或wc_get_order_meta()
- 错误使用
缺少第二个自定义列的处理
- 原代码仅处理了“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
相关产品推荐
相关产品推荐

