You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:59:29