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

Woocommerce review_order相关钩子输出购物车总额重复两次是什么原因?

问题原因
  • 你使用的woocommerce_review_order_before_order_total钩子在WooCommerce结账页面默认会触发两次:第一次为页面初次渲染时触发,第二次为WooCommerce内置的AJAX订单金额同步请求触发,两次调用都会执行你挂载的金额输出逻辑,因此会出现两次重复的金额。
  • 小概率场景为你当前使用的主题、其他WooCommerce相关插件额外重复触发了该钩子,或是你在functions.php中重复注册了两次该函数的挂载动作。
修复方案

最通用的解决方案是给函数添加静态执行标记,确保单次请求周期内函数仅执行一次,修改后的代码如下:

function display_total(){
    // 定义静态变量标记函数执行状态
    static $has_executed = false;
    // 已经执行过就直接返回
    if($has_executed) return;

    global $woocommerce;
    $newTotal = $woocommerce->cart->get_total();
    echo $newTotal;

    // 执行完成后修改标记
    $has_executed = true;
};
add_action( 'woocommerce_review_order_before_order_total', 'display_total');

如果修改后还是存在重复输出,可以做以下排查:

  • 检查主题的结账模板(checkout文件夹下的review-order.php等文件),确认do_action('woocommerce_review_order_before_order_total')代码是否被重复写入了两次
  • 临时禁用其他WooCommerce相关插件,排查是否为其他插件重复触发了该钩子
  • 检查functions.php全文件,确认是否重复写了两次add_action( 'woocommerce_review_order_before_order_total', 'display_total')挂载代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:36:05