WooCommerce结账选择自提时取消COD货到付款额外手续费咨询
WooCommerce COD手续费自提豁免调整方案
调整逻辑
- 原有代码仅在选择COD支付时加收1.7欧元手续费,现在新增配送方式校验:如果用户选择仓库自提,直接跳过手续费加收逻辑
- 原有前端仅监听支付方式切换触发结账更新,现在新增配送方式切换的监听,保证手续费实时同步
- 代码默认匹配WooCommerce默认自提配送方式ID
local_pickup,如果你使用了自定义的自提插件/自定义ID,替换对应判断字段即可
完整可用代码
// 货到付款手续费加收逻辑,自提场景豁免 add_action( 'woocommerce_cart_calculate_fees', 'custom_handling_fee', 10, 1 ); function custom_handling_fee ( $cart ) { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; // 获取当前选中的配送方式,判断是否为自提 $chosen_shipping = WC()->session->get('chosen_shipping_methods')[0] ?? ''; $is_pickup = str_contains($chosen_shipping, 'local_pickup'); // 仅当选择COD支付且不是自提场景时加收手续费 if ( 'cod' === WC()->session->get('chosen_payment_method') && !$is_pickup ) { $fee = 1.7; $cart->add_fee( 'Extra per pagamento alla consegna', $fee, true ); } } // 结账页实时更新监听,覆盖支付方式、配送方式切换场景 add_action( 'wp_footer', 'custom_checkout_jqscript' ); function custom_checkout_jqscript() { if ( is_checkout() && ! is_wc_endpoint_url() ) : ?> <script type="text/javascript"> jQuery( function($){ // 监听支付方式切换 $('form.checkout').on('change', 'input[name="payment_method"]', function(){ $(document.body).trigger('update_checkout'); }); // 新增监听配送方式切换 $('form.checkout').on('change', 'input[name^="shipping_method"]', function(){ $(document.body).trigger('update_checkout'); }); }); </script> <?php endif; }
补充说明
- 如果你的服务器使用PHP7及更低版本,将代码中
$is_pickup = str_contains($chosen_shipping, 'local_pickup');替换为$is_pickup = strpos($chosen_shipping, 'local_pickup') !== false;即可兼容。 - 如果不确定你的自提配送方式ID,可按以下路径查询:WooCommerce后台 → 设置 → 配送 → 对应配送区域 → 点击自提方法,浏览器地址栏中
instance_id参数对应的数值拼接后就是完整ID,例如local_pickup:2,直接替换代码中local_pickup字段即可。
内容的提问来源于stack exchange,提问作者Andrea Infunti
相关产品推荐
相关产品推荐

