if语句中有多个has_term

时间:2018-01-05 12:06:05

标签: php wordpress woocommerce categories custom-taxonomy

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购物车中,如果客户有一种类型的产品类别而不是另一种产品类别,我想显示一条消息,如在"你应该买这个以购买这个"警报。

但是我无法在if语句中使用代码来处理多个产品类别。一个工作正常,但如果我用&&。

添加另一个语句,则没有任何反应
if ( has_term( 'flakt', 'product_cat', $product->get_id() ) && has_term( 'installation', 'product_cat', $product->get_id() ) ) {}

我做错了什么?

编辑: 忘了解释。如果购物车的产品类别为“#34; flakt"”,但不包含类别"安装"的产品,则应显示该消息。

2 个答案:

答案 0 :(得分:3)

在if语句中使用多个has_term()应使用“OR”而不是“AND”,

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

您可以使用直接使用{/ 3>}条件函数的数组:

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

这也应该有效。

与您的评论相关的更新:

由于产品可以包含许多产品类别,如果您想确保仅为'flakt'产品类别而不是'安装'产品类别显示消息,您将使用:

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;
        }
    }
}
  

对于产品ID:

     

您应该使用$cart_item['product_id'](而不是$cart_item['data']->get_id()),因为产品差异不适用于您的产品类别......

答案 1 :(得分:0)

我必须这样解决..

$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();
}