WooCommerce商品分类检测失败:无法识别‘soap’分类,代码求助
问题根源&解决方案
嘿,问题很明确——你用错了has_term()的参数!$_product->get_categories()返回的是带HTML标签的分类名称字符串(比如<a href="/product-category/soap/">Soap</a>),而has_term()需要的是分类的taxonomy(WooCommerce产品分类的taxonomy是product_cat),或者分类ID/别名的数组,所以你的判断永远不会命中“success”。
下面是修正后的完整代码,两种方法任选其一:
<?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>'; // 方法1:最简洁的写法,直接用has_term指定taxonomy和产品ID if( has_term( 'soap', 'product_cat', $_product->get_id() ) ){ echo "success"; } else { echo "nope"; } // ------------------------------ // 方法2:手动提取分类别名再判断(适合需要额外处理分类的场景) // $product_category_slugs = wp_list_pluck( $_product->get_terms('product_cat'), 'slug' ); // if( in_array( 'soap', $product_category_slugs ) ){ // echo "success"; // } else { // echo "nope"; // } } ?>
重要说明
has_term()的标准用法:has_term( $term, $taxonomy, $post ),这里$taxonomy必须填product_cat(WooCommerce产品分类的专属taxonomy),$post可以传产品ID或者产品对象。- 别再用
get_categories()做逻辑判断了!这个方法是给前端显示用的,会返回带链接的HTML字符串,完全不适合用来做条件检查。 - 如果需要获取产品的分类数据,用
$_product->get_terms('product_cat')能拿到纯分类对象数组,再用wp_list_pluck可以轻松提取别名、名称或者ID。
内容的提问来源于stack exchange,提问作者Guo Yong
相关产品推荐
相关产品推荐

