如何仅当特定配送类商品单独在WooCommerce购物车时禁用配送方式
修改现有代码实现需求
完全可以直接修改你现有的代码来实现需求,核心是添加购物车中不存在其他配送类商品的判断逻辑。以下是修改后的完整代码:
add_filter( 'woocommerce_package_rates', 'custom_hide_shipping_for_shipping_class', 9999, 2 ); function custom_hide_shipping_for_shipping_class( $rates, $package ) { $shipping_class_target = 569; // 目标配送类ID $has_target_class = false; $has_other_class = false; // 遍历购物车所有商品,检查配送类 foreach ( WC()->cart->get_cart_contents() as $values ) { $item_shipping_class = $values['data']->get_shipping_class_id(); if ( $item_shipping_class == $shipping_class_target ) { $has_target_class = true; } else { // 只要有一个商品不属于目标类,标记为存在其他类 $has_other_class = true; break; // 提前终止循环,提升效率 } } // 仅当存在目标类商品,且无其他类商品时,禁用指定配送方式 if ( $has_target_class && !$has_other_class ) { unset( $rates['free_shipping:8'] ); // 要禁用的配送方式ID // 如果需要禁用全部配送选项,可替换为:$rates = array(); } return $rates; }
关键改动说明
- 新增状态标记:用
$has_target_class和$has_other_class分别记录购物车中是否存在目标类商品、是否存在其他类商品 - 提前终止循环:一旦发现非目标类商品,立即跳出循环,减少不必要的遍历
- 精准触发条件:只有同时满足「存在目标类商品」和「无其他类商品」时,才执行禁用逻辑,完全匹配你的需求
注意:修改代码后,需要在WooCommerce设置中清空配送缓存(进入「配送」设置页,点击「保存更改」即可),确保新规则生效。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

