WooCommerce后台订单列表自定义列无法显示值的解决方法
WooCommerce后台订单列表自定义列不显示数据的解决方法
你的问题出在自定义列的回调函数里,存在两个明显错误:
wc_get_order函数参数使用错误,该函数仅需传入订单ID,多余参数会导致无法正确获取订单对象- 未定义
$my_value变量,直接echo会输出空值
修正后的完整代码
替换原来的「Edit Admin Orders Page, New Column」部分代码即可:
//Edit Admin Orders Page, New Column add_filter('manage_edit-shop_order_columns', 'add_order_new_column_header', 20); function add_order_new_column_header($columns){ $new_columns = array(); foreach ($columns as $column_name => $column_info){ $new_columns[$column_name] = $column_info; if ('order_total' === $column_name) { $new_columns['order_details'] = __('Info', 'textdomain'); } } return $new_columns; } add_action('manage_shop_order_posts_custom_column', 'add_wc_order_admin_list_column_content'); function add_wc_order_admin_list_column_content($column){ global $post; if ('order_details' === $column){ // 正确获取订单对象 $order = wc_get_order($post->ID); // 通过订单对象获取自定义字段值(WooCommerce 3.0+推荐用法) $my_value = $order->get_meta('_billing_my_custom_select'); // 有值则输出,无值显示默认文本 echo !empty($my_value) ? $my_value : __('未填写', 'textdomain'); } } //End Edit Admin Orders Page, New Column
额外优化建议
为了兼容WooCommerce 3.0+的规范,建议同时修改「Admin Note Section」的代码,将$order->id替换为$order->get_id():
//Admin Note Section add_action('woocommerce_admin_order_data_after_billing_address', function($order) { $my_value = get_post_meta($order->get_id(), '_billing_my_custom_select', true); if (!empty($my_value)) { echo '<p><strong>' . __('How Did You Discover Us?', 'textdomain') . ':</strong> ' . $my_value . '</p>'; } }); //End Admin Note Section
原理说明
wc_get_order($post->ID):正确获取WooCommerce订单对象,这是官方推荐的方式$order->get_meta('_billing_my_custom_select'):通过订单对象的内置方法获取自定义字段值,比直接使用get_post_meta更安全,且兼容未来版本的WooCommerce
内容的提问来源于stack exchange,提问作者TurnItOffAndOnAgain
相关产品推荐
相关产品推荐

