You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

添加商品时自动重新计算WooCommerce订单总额的实现方案

问题背景

在WooCommerce系统中,当订单处于「On Hold」状态时,仓库团队通过「Add Item(s)」按钮添加额外商品以填满待发托盘剩余空间。但财务团队下载发票或导出订单时,发现订单总额并未更新。

复现测试结果

向「On Hold」状态订单添加商品后,未点击「Recalculate」或「Update」按钮就离开页面:

  • 刷新页面后商品仍存在
  • 订单小计已更新,但总额未变化

需求

实现每次添加商品时自动更新订单总额(与小计自动更新逻辑一致),无需依赖仓库团队手动操作,避免因遗忘导致财务数据出错。

无效尝试

曾绑定woocommerce_before_save_orderwoocommerce_before_calculate_totals动作钩子,但未生效。


解决方案代码

通过绑定woocommerce_ajax_add_order_item_meta钩子,在添加订单商品后自动重新计算并保存订单总额:

function recalculate_totals_on_order_update($item_id, $values) {
    // 通过商品项ID获取对应订单ID
    $order_id = wc_get_order_id_by_order_item_id($item_id);

    if (!$order_id) {
        return; // 未找到订单ID则终止执行
    }

    $order = wc_get_order($order_id);

    if ($order) {
        $order->calculate_totals(); // 重新计算订单所有总额(含税费、运费等)
        $order->save(); // 保存更新后的订单数据
    }
}

add_action('woocommerce_ajax_add_order_item_meta', 'recalculate_totals_on_order_update', 10, 2);

代码说明

  • 钩子woocommerce_ajax_add_order_item_meta的触发时机为后台通过AJAX添加订单商品元数据之后,刚好匹配添加商品的操作场景
  • calculate_totals()方法会自动重新计算订单的小计、税费、运费及最终总额,和手动点击「Recalculate」按钮的逻辑一致
  • 调用save()确保更新后的订单数据被持久化到数据库,避免刷新后数据丢失

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

火山引擎 最新活动