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
相关产品推荐
相关产品推荐

