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

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;
}

代码说明

  1. 双钩子注册列:同时使用传统模式的manage_edit-shop_order_columns和HPOS的woocommerce_shop_order_list_columns钩子,确保两种存储模式下都能加载自定义列。
  2. 强制列可见性:通过woocommerce_shop_order_list_column_visibility钩子确保自定义列默认显示在订单列表的显示设置中。
  3. 分模式输出内容:针对传统模式使用manage_shop_order_posts_custom_column,HPOS模式使用woocommerce_shop_order_list_column_{$column}专属钩子,避免对象获取错误。
  4. 合并搜索逻辑:将原有的两个搜索钩子函数合并,减少冗余代码,同时确保配送和支付方式的搜索功能正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 11:18:20