Woocommerce购物车多分类判断异常:多条件添加后代码无效果
问题分析与解决思路
你的问题出在条件判断的逻辑范围上:你当前的代码是在判断单个商品同时属于"flakt"和"installation"两个分类,但你的需求是整个购物车中存在"flakt"分类商品,且完全没有"installation"分类商品——这两个逻辑完全不同,所以代码自然不会生效。
正确的实现步骤
我们需要先遍历整个购物车,分别标记两个状态:购物车是否包含"flakt"商品,是否包含"installation"商品,最后根据这两个标记来触发提示。
完整代码示例
// 初始化两个状态标记 $has_flakt = false; $has_installation = false; // 遍历购物车所有商品 foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) { $product = $cart_item['data']; $product_id = $product->get_id(); // 检查当前商品是否属于flakt分类,是则标记状态 if ( has_term( 'flakt', 'product_cat', $product_id ) ) { $has_flakt = true; } // 检查当前商品是否属于installation分类,是则标记状态 if ( has_term( 'installation', 'product_cat', $product_id ) ) { $has_installation = true; } } // 最终判断:有flakt商品,且没有installation商品时显示提示 if ( $has_flakt && !$has_installation ) { noInstallModal(); }
代码解释
- 状态标记初始化:先定义两个布尔变量,默认都是
false,用来记录购物车是否包含目标分类的商品。 - 遍历购物车:逐个检查每个商品的分类,只要发现对应分类的商品,就把对应的标记设为
true。 - 最终条件判断:当
$has_flakt为true(购物车有flakt商品)且$has_installation为false(购物车没有installation商品)时,调用你的提示函数。
额外注意事项
- 如果你的商品是可变商品(Variations),有时候需要用父商品的ID来判断分类,此时可以把
$product_id替换为$cart_item['product_id'](父商品ID),而不是变体自身的ID。 - 确保这段代码放在合适的WooCommerce钩子中执行,比如
woocommerce_before_cart或者woocommerce_cart_contents,这样才能在购物车页面正确触发。
内容的提问来源于stack exchange,提问作者Sofia Sojé
相关产品推荐
相关产品推荐

