检查产品是否属于 Woocommerce 中的特定产品类别

Check if a product belongs to a specific product category in Woocommerce

在 Woocommerce 中,我想检查产品是否属于产品类别 "soap"。

我正在使用此代码:

<?php
    global $woocommerce;
    $items = $woocommerce->cart->get_cart();

        foreach($items as $item => $values) { 
            $_product =  wc_get_product( $values['data']->get_id() );
            $getProductDetail = wc_get_product( $values['product_id'] );
            echo "<b>".$_product->get_title() .'</b>  <br> Quantity: '.$values['quantity'].'<br>'; 
            // $category[] = $item->slug;
            // echo $category[0]->cat_name;
            $categories = $_product->get_categories();
            if(has_term( 'soap',$categories )){
                echo "success";
            }else{

                echo "nope";
            }
        }
?>

但是我无法让它工作,因为我 "nope"。我认为这是问题所在的代码部分:

$categories = $_product->get_categories();
            if(has_term( 'soap',$categories )){
                echo "success";
            }else{

                echo "nope";
            }
        }

感谢您的帮助

已更新:这是使其工作的正确方法:

foreach(WC()->cart->get_cart() as $cart_item ) { 
    // The instance of the WC_Product object
    $_product = $cart_item['data'];
    // Some output
    echo '<b>'.$cart_item['data']->get_title().'</b>  <br>'; 
    echo 'Quantity: '.$cart_item['quantity'].'<br>'; 

    // Check for a specific product category
    if( has_term( 'soap', 'product_cat', $cart_item['product_id'] ) ){
        echo "success";
    } else {
        echo "nope";
    }
}

已经过测试并可以正常工作。

备注:

  • 要从购物车商品中获取 WC_Product 对象,只需使用 $cart_item['data']
  • 由于产品变体不管理产品类别或产品标签,在这种情况下我们得到 $cart_item['product_id'] 允许的父变量产品 ID…
    因此,始终在购物车项目中使用 $cart_item['product_id'] 来定位产品类别或产品标签。
  • Woocommerce 产品类别是自定义分类法,不同于 Wordpres 类别。
  • product_cat 是产品类别的分类法,用于 has_term() 和一些与术语相关的其他 Wordpress 函数。