WooCommerce如何实现仅选中BACS支付时才取整订单总额
WooCommerce 仅BACS支付方式触发订单总额取整实现方案
原有代码全局挂载订单总额计算过滤器,会在所有场景下执行取整逻辑,缺少支付方式判断分支,可通过以下调整实现需求。
修改后完整代码
将以下代码替换原有取整代码,放入主题functions.php文件或自定义功能插件中即可:
add_filter( 'woocommerce_calculated_total', 'custom_calculated_total', 10, 1 ); function custom_calculated_total( $total ) { // 排除后台场景,仅结账页选中BACS支付时执行取整 if ( ! is_admin() && WC()->session && 'bacs' === WC()->session->get( 'chosen_payment_method' ) ) { $total = round( $total, 1 ); $total = ceil( $total ); } // 其余场景直接返回原始计算总额 return $total; } // 解决切换支付方式时总额不实时刷新的问题 add_action( 'wp_footer', 'custom_checkout_payment_trigger_refresh' ); function custom_checkout_payment_trigger_refresh() { if ( is_checkout() && ! is_wc_endpoint_url() ) { ?> <script type="text/javascript"> jQuery(function($){ // 监听支付方式选择框变化,触发结账数据刷新 $(document.body).on('change', 'input[name="payment_method"]', function() { $(document.body).trigger('update_checkout'); }); }); </script> <?php } }
核心逻辑说明
- 支付方式判断:通过WooCommerce会话接口
WC()->session->get('chosen_payment_method')获取用户当前选中的支付方式,匹配BACS支付的固定标识bacs时才执行取整逻辑 - 场景排除:增加
! is_admin()判断,避免后台编辑订单时误触发取整规则 - 实时刷新:补充前端JS监听逻辑,用户切换支付方式时自动触发结账总额重算,避免非BACS支付场景下残留取整后的金额
注意:如果你的站点使用了自定义的BACS支付插件,需要将代码中
bacs替换为对应自定义支付方式的实际ID,可通过检查支付方式单选框的value属性获取正确标识。
内容的提问来源于stack exchange,提问作者Eugenia Sloushch
相关产品推荐
相关产品推荐

