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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:21:43