You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅当特定配送类商品单独在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;
}

关键改动说明

  1. 新增状态标记:用$has_target_class和$has_other_class分别记录购物车中是否存在目标类商品、是否存在其他类商品
  2. 提前终止循环:一旦发现非目标类商品,立即跳出循环,减少不必要的遍历
  3. 精准触发条件:只有同时满足「存在目标类商品」和「无其他类商品」时,才执行禁用逻辑,完全匹配你的需求

注意:修改代码后,需要在WooCommerce设置中清空配送缓存(进入「配送」设置页,点击「保存更改」即可),确保新规则生效。

内容的提问来源于stack exchange,提问作者Adam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 09:42:38