WooCommerce中免运费可用时设置Local Pick-up费用为零
解决方案
直接修改你的代码,在免运费生效时把Local Pick-up的费用强制设为0即可,同时保留原有的配送方式筛选逻辑:
add_filter( 'woocommerce_package_rates', 'hide_shipping_except_local_when_free_is_available', 100 ); function hide_shipping_except_local_when_free_is_available($rates) { $free = $local = array(); foreach ( $rates as $rate_id => $rate ) { if ( 'free_shipping' === $rate->method_id ) { $free[ $rate_id ] = $rate; } elseif ( 'local_pickup' === $rate->method_id ) { $local[ $rate_id ] = $rate; } } // 当免运费可用时,将Local Pick-up设为免费 if ( ! empty( $free ) && ! empty( $local ) ) { foreach ( $local as $local_rate_id => $local_rate ) { // 设置配送费用为0 $local_rate->cost = 0; // 清空所有税费(如果有) $local_rate->taxes = array(); // 更新修改后的自提选项 $local[ $local_rate_id ] = $local_rate; } return array_merge( $free, $local ); } return $rates; }
关键修改说明
- 新增Local Pick-up费用修改逻辑:当检测到免运费选项存在时,遍历所有自提配送方式,将费用
cost设为0,同时清空税费数组taxis,确保完全免费。 - 保留原有核心逻辑:免运费不可用时,返回所有原始配送方式。
测试注意事项
- 修改代码后,先清空购物车并刷新页面,避免WooCommerce的配送方式缓存影响测试结果。
- 测试两种场景:
- 购物车小计≥45欧元:确认显示免运费和免费自提两个选项
- 购物车小计<45欧元:确认显示所有付费配送方式,自提恢复原有定价(如果之前是付费的)
内容的提问来源于stack exchange,提问作者user23311381
相关产品推荐
相关产品推荐

