首页 > 编程语言 >如何在WooCommerce我的账户订单列表添加总重量列

如何在WooCommerce我的账户订单列表添加总重量列

来源:互联网 2026-06-30 08:00:02

本文介绍如何在 WooCommerce「我的账户 订单」页面的订单表格中新增一列,动态显示每笔订单的总重量(含单位),基于商品权重与购买数量自动计算,无需手动设置元数据。 先问一个问题:当客户登录自己的 WooCommerce 账户,进入“我的账户 订单”页面,看到的是一个标准的订单列表——

本文介绍如何在 WooCommerce「我的账户 > 订单」页面的订单表格中新增一列,动态显示每笔订单的总重量(含单位),基于商品权重与购买数量自动计算,无需手动设置元数据。

先问一个问题:当客户登录自己的 WooCommerce 账户,进入“我的账户 > 订单”页面,看到的是一个标准的订单列表——订单号、日期、状态、总额,最后附带一个操作按钮。信息虽然齐全,但总感觉缺了点什么?

答案很简单:缺少一个可直接查看的“订单总重量”。对于经营物流、寄送大件商品或注重环保包装的商家而言,客户若能在列表中一目了然地看到每笔订单的总重量,就能大致估算运费或包装材料用量,从而提升整体体验。更直接地说,这个功能完全无需修改数据库,也无需建立自定义字段,仅利用 WooCommerce 自带的钩子即可实现。

长期稳定更新的攒劲资源: >>>点此立即查看<<<

实现原理简述

思路非常清晰,只需两步:

  1. 插入新列:通过 woocommerce_my_account_my_orders_columns 过滤器,在“订单总额”列后面新增一列,列名可设为“订单总重量”;
  2. 填充数据:利用 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 );}

代码逻辑简洁明了,但有几个关键细节需要特别说明。

注意事项与最佳实践

  • 权重字段必须填写:这一点至关重要。如果后台商品编辑页的“产品数据 > 常规 > 重量”为空或填写了非数字字符,则该商品的重量贡献将变为 0。因此,在编辑商品时应养成填写重量的习惯,这是最容易出错的地方。
  • 单位自动适配:代码直接读取 WooCommerce 设置中的重量单位——后台配置为 kg 或 lbs,页面上即显示相应单位,完全无需硬编码,灵活且省时。
  • 性能无需担忧:该代码仅在“我的账户 > 订单”列表页面触发,对首页或产品页面没有任何性能影响,仅在需要时执行计算。
  • 兼容性可靠:代码中使用 $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,显示清晰直观,无需刷新或手动录入,全部自动化处理。

这一小小的改动,往往能显著提升用户体验。细节虽小,做到位便是赢家。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。