if 语句中的多个 has_term

Multiple has_term in if statement

foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {

    $product = $cart_item['data'];

    if ( has_term( 'flakt', 'product_cat', $product->get_id() ) ) {
        noInstallModal();
        break;
    }
}

在 Woocommerce 购物车中,如果客户有一种产品类别但没有另一种,我想显示一条消息,如 "you should really buy this to buy this" 警报。

但我无法在 if 语句中获得用于多个产品类别的代码。一个工作正常,但如果我添加另一个带有 && 的语句,什么也不会发生。

if ( has_term( 'flakt', 'product_cat', $product->get_id() ) && has_term( 'installation', 'product_cat', $product->get_id() ) ) {}

我做错了什么?

编辑: 忘记解释了。如果购物车中有类别为 "flakt" 的产品,但没有类别为 "installation" 的产品,则应显示该消息。

在 if 语句中有多个 has_term()你应该使用 "OR" 而不是 "AND",:

if ( has_term( 'flakt', 'product_cat', $product->get_id() ) || has_term( 'installation', 'product_cat', $product->get_id() ) ) {}

You can use directly an array of terms with has_term() conditional function:

if ( has_term( array('flakt', 'installation'), 'product_cat', $product->get_id() ) ) {}

这应该也有效。


与您的评论相关的更新:

由于一个产品可以有多个产品类别,如果您希望确保只显示 'flakt' 产品类别而不是 'installation' 产品类别的消息,您将使用:

foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
    if ( has_term( 'flakt', 'product_cat', $cart_item['product_id'] ) ) {
        if ( ! has_term( 'installation', 'product_cat', $cart_item['product_id'] ) ) {
            noInstallModal();
            break;
        }
    }
}

For the product ID:

You should use $cart_item['product_id'] (instead of $cart_item['data']->get_id()) as product variarions will not work for your product categories…

我不得不这样解决..

$flakt = false;
$install = false;

foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
   $product = $cart_item['data'];

   if ( has_term('flakt', 'product_cat', $product->get_id()) ){
       $flakt = true;
   }
   if ( has_term('installation', 'product_cat', $product->get_id()) ){
       $install = true;
   }
}

if($flakt && !$install){
   noInstallModal();
}