【问题标题】:Multiple has_term in if statementif 语句中有多个 has_term
【发布时间】:2018-06-15 05:58:09
【问题描述】:
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() ) ) {}

我做错了什么?

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

【问题讨论】:

    标签: php wordpress woocommerce categories custom-taxonomy


    【解决方案1】:

    如果语句中有多个has_term()你应该使用“OR”而不是“AND”,:

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

    您可以直接使用一组术语has_term()条件函数:

    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()),因为产品变体不适用于您的产品类别……

    【讨论】:

    • 我错过了解释一件事。对不起!如果购物车中的一种产品具有“flakt”类别,但没有“安装”类别,则应显示该消息。这可能吗?
    • 您的解决方案应该可以工作,但由于某种原因不能。可能是 Wordpress / WooCommerce 本身的一些问题。我用另一种方式解决了,但谢谢!
    【解决方案2】:

    我不得不这样解决它..

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

    【讨论】:

    • 对我没用...还尝试了此代码 if (!has_term('term', 'taxonomy', $post->ID )) {} 使用 NOT 运算符没有要么工作
    • 你们这真的很奇怪。 IF 的任何一部分都可以独立工作,但是当将两者与一个或 || 结合使用时两者都行不通。我不得不使用“if,elseif,else”来使逻辑正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    相关资源
    最近更新 更多