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"”,但不包含类别"安装"的产品,则应显示该消息。
答案 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();
}