本文介绍如何在 WooCommerce「我的账户 订单」页面的订单表格中新增一列,动态显示每笔订单的总重量(含单位),基于商品权重与购买数量自动计算,无需手动设置元数据。 先问一个问题:当客户登录自己的 WooCommerce 账户,进入“我的账户 订单”页面,看到的是一个标准的订单列表——
本文介绍如何在 WooCommerce「我的账户 > 订单」页面的订单表格中新增一列,动态显示每笔订单的总重量(含单位),基于商品权重与购买数量自动计算,无需手动设置元数据。
先问一个问题:当客户登录自己的 WooCommerce 账户,进入“我的账户 > 订单”页面,看到的是一个标准的订单列表——订单号、日期、状态、总额,最后附带一个操作按钮。信息虽然齐全,但总感觉缺了点什么?
答案很简单:缺少一个可直接查看的“订单总重量”。对于经营物流、寄送大件商品或注重环保包装的商家而言,客户若能在列表中一目了然地看到每笔订单的总重量,就能大致估算运费或包装材料用量,从而提升整体体验。更直接地说,这个功能完全无需修改数据库,也无需建立自定义字段,仅利用 WooCommerce 自带的钩子即可实现。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
思路非常清晰,只需两步:
woocommerce_my_account_my_orders_columns 过滤器,在“订单总额”列后面新增一列,列名可设为“订单总重量”;woocommerce_my_account_my_orders_column_{column_key} 动作钩子,遍历当前订单中的所有商品,将每个商品的重量(从商品编辑页面读取)乘以购买数量,累加得到总重量,最后拼接上系统配置的重量单位(如 kg 或 lbs)并显示。整个过程实时计算,不会向数据库写入任何额外信息。此方案的优势在于:轻量、不侵入数据库、兼容最新版本,对于 WooCommerce 8.x 以上版本完全适用。
以下是完整的代码实现。请将内容复制到子主题的 functions.php 文件中——务必使用子主题,否则主题更新会导致修改丢失。
/** * 在「我的账户 > 订单」表格中添加「订单总重量」列 * 位置:插入在 'order-total' 列之后 */add_filter( 'woocommerce_my_account_my_orders_columns', 'ecommercehints_weight_column_my_account_orders_table', 10, 1 );function ecommercehints_weight_column_my_account_orders_table( $columns ) { $new_columns = []; foreach ( $columns as $key => $name ) { $new_columns[ $key ] = $name; if ( 'order-total' === $key ) { $new_columns['order-weight'] = __( '订单总重量', 'woocommerce' ); // 中文列标题 } } return $new_columns;}/** * 渲染每笔订单的总重量(自动计算 + 单位) */add_action( 'woocommerce_my_account_my_orders_column_order-weight', 'ecommercehints_get_order_weight', 10, 1 );function ecommercehints_get_order_weight( $order ) { $weight_unit = get_option( 'woocommerce_weight_unit', 'kg' ); $total_weight = 0.0; foreach ( $order->get_items() as $item ) { $product = $item->get_product(); if ( ! $product ) continue; $quantity = (int) $item->get_quantity(); $product_weight = floatval( $product->get_weight() ); $total_weight += $product_weight * $quantity; } // 格式化输出:保留小数点后两位,避免 .00 显示为整数(可选优化) $formatted_weight = is_float( $total_weight ) && floor( $total_weight ) == $total_weight intval( $total_weight ) : number_format( $total_weight, 2, '.', '' ); echo esc_html( $formatted_weight . ' ' . $weight_unit );}代码逻辑简洁明了,但有几个关键细节需要特别说明。
$order->get_items() 和 $item->get_product(),这是 WooCommerce 现代 API 的标准做法,兼容 WC 6.0+ 和 PHP 8.x。只要站点不是过旧版本,就不会出现问题。esc_html() 防止 XSS 攻击,floatval() 和 number_format() 确保数值的健壮性,这是成熟代码应有的表现。'order-weight',避免了其他主题或插件可能占用 'order-items' 名称的冲突。如果已占用该键,需同步修改两处钩子中的键名。代码部署后,客户登录前台账户,点击“我的账户 > 订单”,即可看到新增一列,标题为“订单总重量”。每个订单行的数据均为实时计算得出,例如 3.25 kg 或 7.1 lbs,显示清晰直观,无需刷新或手动录入,全部自动化处理。
这一小小的改动,往往能显著提升用户体验。细节虽小,做到位便是赢家。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述