如何在WooCommerce中判断父分类?子分类专属标签添加异常排查
解决WooCommerce仅为有子分类的商品分类添加test标签的问题
你的问题出在代码的判断逻辑上——你现在的代码只是检查分类是否为顶级分类($cat->category_parent == 0),而不是判断这个顶级分类是否包含子分类,所以所有顶级分类都会显示test标签。
下面是修正后的代码,我已经调整了判断逻辑,只给有子分类的顶级分类添加test标签:
<?php $taxonomy = 'product_cat'; $orderby = 'name'; $show_count = 0; // 1 for yes, 0 for no $pad_counts = 0; // 1 for yes, 0 for no $hierarchical = 1; // 1 for yes, 0 for no $title = ''; $empty = 0; $args = array( 'taxonomy' => $taxonomy, 'orderby' => $orderby, 'show_count' => $show_count, 'pad_counts' => $pad_counts, 'hierarchical' => $hierarchical, 'title_li' => $title, 'hide_empty' => $empty ); $all_categories = get_categories( $args ); foreach ($all_categories as $cat) { // 仅处理顶级分类 if($cat->category_parent == 0) { $category_id = $cat->term_id; echo '<li>'; echo '<a href="'. get_term_link($cat->slug, 'product_cat') .'">'. $cat->name .'</a>'; // 获取当前分类的所有子分类ID,判断是否存在子分类 $child_categories = get_term_children( $category_id, $taxonomy ); if( !empty($child_categories) ) { echo 'test'; } echo '</li>'; } } ?>
关键改动说明:
- 移除了重复的
$cat->category_parent == 0判断(外层已经筛选过顶级分类了) - 使用WordPress内置函数
get_term_children()获取当前顶级分类的所有子分类ID列表 - 通过
!empty($child_categories)判断是否存在子分类,只有当子分类存在时才输出test标签
这个方法比直接依赖分类的商品计数更可靠,因为有些顶级分类本身没有商品,但包含有商品的子分类,这种情况也能正确识别。
内容的提问来源于stack exchange,提问作者Filip Gajic
相关产品推荐
相关产品推荐

