WooCommerce 8.6.1后台订单列表自定义列消失问题求助
WooCommerce 8.6.1+ 恢复订单列表自定义配送/支付方式列的解决方案
问题背景
在WooCommerce 8.4版本中,自定义代码可在订单列表添加「配送方式」和「支付方式」列,且能在显示设置中调整可见性。但升级至8.6.1后,无论是否启用High-Performance Order Storage (HPOS),这两个自定义列均不再显示,切换回传统订单存储模式也无效。
问题原因
WooCommerce 8.5+版本对订单列表的钩子体系进行了调整,HPOS模式下新增了专属的列注册与内容输出钩子,原有的传统模式钩子在新版本中兼容性下降,导致自定义列无法正常加载。
修复后的代码
将以下代码替换原functions.php中的对应内容:
// 注册自定义订单列(兼容传统模式与HPOS) add_filter( 'manage_edit-shop_order_columns', 'add_custom_columns_to_admin_orders', 20 ); add_filter( 'woocommerce_shop_order_list_columns', 'add_custom_columns_to_admin_orders', 20 ); function add_custom_columns_to_admin_orders( $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_shipping'] = __( '配送方式', 'my-textdomain' ); $new_columns['order_payment'] = __( '支付方式', 'my-textdomain' ); } } return $new_columns; } // 确保自定义列在显示设置中可见(兼容两种模式) add_filter( 'woocommerce_shop_order_list_column_visibility', 'custom_order_columns_visibility', 20 ); function custom_order_columns_visibility( $columns ) { $columns['order_shipping'] = true; $columns['order_payment'] = true; return $columns; } // 输出自定义列内容(兼容传统模式与HPOS) add_action( 'manage_shop_order_posts_custom_column', 'custom_columns_content_in_admin_orders' ); add_action( 'woocommerce_shop_order_list_column_order_shipping', 'custom_shipping_column_content' ); add_action( 'woocommerce_shop_order_list_column_order_payment', 'custom_payment_column_content' ); // 传统模式下的内容输出 function custom_columns_content_in_admin_orders( $column ) { global $the_order; // 确保订单对象存在 if ( ! $the_order ) { $the_order = wc_get_order( get_the_ID() ); } if ( 'order_shipping' === $column ) { echo $the_order->get_shipping_method(); } if ( 'order_payment' === $column ) { echo $the_order->get_payment_method_title(); } } // HPOS模式下的配送方式列内容 function custom_shipping_column_content( $order ) { echo $order->get_shipping_method(); } // HPOS模式下的支付方式列内容 function custom_payment_column_content( $order ) { echo $order->get_payment_method_title(); } // 让配送和支付方式支持搜索 add_filter( 'woocommerce_shop_order_search_fields', 'add_order_search_fields' ); function add_order_search_fields( $meta_keys ){ $meta_keys[] = '_payment_method_title'; $meta_keys[] = '_shipping_method'; return $meta_keys; }
代码说明
- 双钩子注册列:同时使用传统模式的
manage_edit-shop_order_columns和HPOS的woocommerce_shop_order_list_columns钩子,确保两种存储模式下都能加载自定义列。 - 强制列可见性:通过
woocommerce_shop_order_list_column_visibility钩子确保自定义列默认显示在订单列表的显示设置中。 - 分模式输出内容:针对传统模式使用
manage_shop_order_posts_custom_column,HPOS模式使用woocommerce_shop_order_list_column_{$column}专属钩子,避免对象获取错误。 - 合并搜索逻辑:将原有的两个搜索钩子函数合并,减少冗余代码,同时确保配送和支付方式的搜索功能正常。
内容的提问来源于stack exchange,提问作者Karl Helberg
相关产品推荐
相关产品推荐

