如何在WooCommerce中以分类深度为条件编写if判断语句
解决WooCommerce分类深度判断的问题
首先先理清楚你的分类结构对应的深度值——WooCommerce的产品分类(product_cat)默认是从0开始计数绝对深度的:
- 顶级分类
fruit:深度0 - 一级子分类
apple/banana:深度1 - 二级子分类
large(apple下)/var1(banana下):深度2 - 三级子分类
large(var1下):深度3
你之前用第三方函数返回空数组,大概率是因为函数没有正确获取当前的产品分类对象,或者逻辑适配的是普通文章分类而非WooCommerce产品分类。直接用WordPress/WooCommerce原生方法就能解决问题,下面分场景给你代码:
场景1:在分类存档页面(比如taxonomy-product_cat.php)判断
直接获取当前被查询的分类对象,然后读取它的depth属性即可:
// 获取当前分类对象 $current_cat = get_queried_object(); // 确保获取到的是有效的产品分类 if ( $current_cat && is_a( $current_cat, 'WP_Term' ) && $current_cat->taxonomy === 'product_cat' ) { $cat_depth = $current_cat->depth; // 深度为2的分类(比如apple > large) if ( $cat_depth === 2 ) { // 这里写你的操作代码,比如加载特定模板、显示自定义内容 echo "执行深度为2的分类操作"; } // 深度为3的分类(比如banana > var1 > small) elseif ( $cat_depth === 3 ) { // 另一组操作逻辑 echo "执行深度为3的分类操作"; } }
场景2:在单个产品页面判断所属分类的深度
如果要在产品详情页根据产品所属的分类深度做操作,需要先获取产品的所有分类,再逐个判断:
global $product; if ( ! $product ) return; // 获取产品关联的所有产品分类 $product_cats = get_the_terms( $product->get_id(), 'product_cat' ); if ( ! $product_cats || is_wp_error( $product_cats ) ) return; foreach ( $product_cats as $cat ) { $cat_depth = $cat->depth; if ( $cat_depth === 2 ) { // 针对深度2的分类执行操作 } elseif ( $cat_depth === 3 ) { // 针对深度3的分类执行操作 } }
为什么之前的函数失效?
第三方函数可能存在几个问题:
- 没有针对
product_cat分类做适配,默认调用的是普通文章分类category的逻辑 - 没有判断当前页面是否是分类存档页,导致获取不到分类对象返回空
- 函数本身逻辑过时,不兼容新版WordPress/WooCommerce
直接用原生的WP_Term对象的depth属性是最可靠的,不需要依赖外部工具函数。
内容的提问来源于stack exchange,提问作者blackhill24
相关产品推荐
相关产品推荐

