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

为兼容HPOS的WooCommerce后台订单列表添加订单总重量

解决WooCommerce HPOS下订单总重量列失效问题

你的代码失效核心原因是HPOS(高性能订单存储)启用后,后台订单页面的钩子和订单对象获取方式发生了变化:

  • 原钩子manage_shop_order_posts_custom_column仅适用于传统post类型的订单,HPOS页面需要使用专属钩子
  • 全局$the_order对象在HPOS环境下不再有效,需通过订单ID获取订单实例

以下是修正后的完整代码,可直接替换原有片段:

// 添加订单总重量列
add_filter( 'manage_woocommerce_page_wc-orders_columns', 'add_order_weight_column' );
function add_order_weight_column( $columns ) {
    $columns['total_weight'] = __( 'Weight', 'woocommerce' );
    return $columns;
}

// 填充重量列内容(适配HPOS)
add_action( 'manage_woocommerce_page_wc-orders_custom_column', 'populate_order_weight_column_content', 10, 2 );
function populate_order_weight_column_content( $column, $order_id ) {
    if ( $column == 'total_weight' ) {
        // 通过订单ID获取HPOS订单对象
        $order = wc_get_order( $order_id );
        
        // 优先读取已保存的_cart_weight元数据
        $total_weight = $order->get_meta( '_cart_weight' );
        
        // 若元数据不存在,实时计算订单总重量
        if ( empty( $total_weight ) ) {
            $total_weight = 0;
            foreach ( $order->get_items() as $item ) {
                $product = $item->get_product();
                if ( $product && $product->has_weight() ) {
                    $total_weight += $product->get_weight() * $item->get_quantity();
                }
            }
            // 可选:保存计算结果到元数据,避免重复计算
            $order->update_meta_data( '_cart_weight', $total_weight );
            $order->save();
        }

        // 格式化显示重量或N/A
        echo $total_weight > 0 ? wc_format_weight( $total_weight ) : __( 'N/A', 'woocommerce' );
    }
}

关键修改说明:

  1. 钩子替换:用manage_woocommerce_page_wc-orders_custom_column替代原钩子,这是HPOS后台订单页面的专属自定义列钩子,支持传递$column和$order_id两个参数
  2. 订单对象获取:通过wc_get_order( $order_id )获取HPOS兼容的订单实例,放弃全局$the_order
  3. 重量兜底计算:增加了元数据不存在时的实时计算逻辑,确保即使之前未保存重量数据,也能正常显示结果
  4. 可选优化:将计算后的重量保存到元数据,减少后续页面加载时的重复计算开销

使用方式:将代码添加到主题的functions.php文件或自定义插件中,启用HPOS后即可在后台订单页面看到正常显示的总重量列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:36:11