WooCommerce如何基于定金尾款字段_wc_deposits_second_payment计算2% COD手续费
基于尾款金额计算2% COD手续费的实现方案
你可以直接使用以下修改后的代码完成配置:
add_action( 'woocommerce_cart_calculate_fees','cod_fee' ); function cod_fee() { global $woocommerce; if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; // 获取用户选择的支付方式 $chosen_gateway = WC()->session->chosen_payment_method; $fee = 0; // 仅当支付方式为COD时计算手续费 if ( $chosen_gateway == 'cod' ) { // 获取第二笔尾款金额,默认值为0避免报错 $second_payment_amount = WC()->session->get( '_wc_deposits_second_payment', 0 ); // 计算尾款2%的COD手续费,保留两位小数保证金额精度 $fee = round( $second_payment_amount * 0.02, 2 ); // 添加手续费到购物车,第三个参数设为true可开启手续费计税 WC()->cart->add_fee( '2% COD 手续费', $fee, false, '' ); } }
核心调整说明
- 新增了尾款金额获取逻辑,从session中读取
_wc_deposits_second_payment字段作为计算基数 - 补充了手续费计算规则:按尾款金额的2%计算,保留两位小数避免金额精度问题
- 保留了原有的非AJAX后台环境拦截逻辑,不影响后台订单操作
可选调整说明
- 如果需要将手续费计入计税基数,可将
WC()->cart->add_fee的第三个参数修改为true - 若
_wc_deposits_second_payment字段存储在购物车项元数据而非session中,可替换尾款金额获取逻辑为遍历购物车项读取对应自定义字段 - 调试阶段可临时输出
$second_payment_amount的数值,确认尾款金额读取正确后再移除调试代码
内容的提问来源于stack exchange,提问作者Syed Azim Uddaula
相关产品推荐
相关产品推荐

