WooCommerce:先计算BACS支付折扣再算运费的功能实现求助
WooCommerce BACS支付折扣与运费计算调整方案
核心实现代码
下面的代码可以实现你需要的逻辑:选择BACS支付时先打5%折扣,再用折扣后的金额判断是否符合免运费条件。
1. 添加BACS支付专属5%折扣
// 为BACS支付网关添加5%折扣 add_action( 'woocommerce_cart_calculate_fees', 'bacs_payment_5_percent_discount', 10, 1 ); function bacs_payment_5_percent_discount( $cart ) { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; $chosen_payment_method = WC()->session->get('chosen_payment_method'); if ( 'bacs' === $chosen_payment_method ) { $discount_amount = $cart->subtotal * 0.05; $cart->add_fee( 'BACS支付折扣(5%)', -$discount_amount, true ); } } // 支付方式变更时自动刷新购物车 add_action( 'woocommerce_review_order_before_payment', 'refresh_cart_on_payment_method_change' ); function refresh_cart_on_payment_method_change() { ?> <script type="text/javascript"> (function($){ $('form.checkout').on('change', 'input[name="payment_method"]', function(){ $('body').trigger('update_checkout'); }); })(jQuery); </script> <?php }
2. 调整免运费判断依据为折扣后金额
// 修改免运费规则的判断基准为BACS折扣后的小计 add_filter( 'woocommerce_shipping_free_shipping_is_available', 'adjust_free_shipping_based_on_discounted_total', 20, 3 ); function adjust_free_shipping_based_on_discounted_total( $is_available, $package, $shipping_method ) { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return $is_available; // 仅对免运费规则生效 if ( 'free_shipping' !== $shipping_method->id ) return $is_available; $chosen_payment_method = WC()->session->get('chosen_payment_method'); // 选择BACS时用折扣后金额判断免运费 if ( 'bacs' === $chosen_payment_method ) { $discounted_subtotal = WC()->cart->subtotal * 0.95; $is_available = $discounted_subtotal >= 250; } return $is_available; }
代码说明
- 第一部分代码会在用户选择BACS支付时,自动计算购物车原始小计的5%作为折扣,并在购物车/结算页显示;同时监听支付方式切换事件,实时刷新页面更新折扣状态。
- 第二部分代码会拦截WooCommerce的免运费规则判断,当用户选择BACS支付时,用折扣后的金额(原始小计×95%)替代原始小计来判断是否满足满250美元免运费的条件,其他支付方式则保持原有规则不变。
注意事项
- 把代码添加到子主题的
functions.php文件,或者使用代码片段插件(如Code Snippets),不要直接修改主题核心文件,避免更新主题时丢失代码。 - 确保你在WooCommerce后台设置的免运费规则是“购物车小计(不含运费)超过250美元”,代码会自动适配这个规则的判断逻辑。
- 如果你的店铺有多个免运费规则,需要根据规则ID调整代码中的判断条件(可以在后台查看免运费规则的ID,替换代码中的相关判断)。
内容的提问来源于stack exchange,提问作者bilkyroot
相关产品推荐
相关产品推荐

