WooCommerce分类页自定义侧边栏识别父分类实现高亮技术问询
WooCommerce分类侧边栏父分类高亮解决方案
核心修改思路
- 借助WordPress原生函数
get_ancestors()获取当前访问分类的所有上级ID链,用于父分类匹配判断 - 修复原有代码重复声明
class属性的HTML语法错误 - 父分类循环新增判断逻辑:当前父分类是访问的分类本身,或是访问分类的上级分类时,都添加高亮类
修改后完整代码
global $wp_query; $cat_name = "product_cat"; $parent_cat_terms = get_terms($cat_name, array( 'parent' => 0, 'orderby' => 'slug', 'hide_empty' => true, 'exclude' => 122 )); // 获取当前访问的分类信息及父级链 $product_cat = $wp_query->query_vars['product_cat']; $current_cat = get_term_by('slug', $product_cat, $cat_name); $current_cat_ancestors = $current_cat && !is_wp_error($current_cat) ? get_ancestors($current_cat->term_id, $cat_name) : []; echo '<ul class="cat-filters">'; foreach ($parent_cat_terms as $parent_term) { if ($parent_term->count > 0): // 拼接父分类li的class $parent_classes = ['cat-parent']; // 匹配条件:当前是父分类本身,或者当前分类是该父分类的子分类 if ($parent_term->slug == $product_cat || in_array($parent_term->term_id, $current_cat_ancestors)) { $parent_classes[] = 'page-cat'; } echo '<li class="' . implode(' ', $parent_classes) . '">'; echo '<a href="' . get_term_link($parent_term) . '">' . $parent_term->name . '</a>'; $child_cat_terms = get_terms($cat_name, array( 'parent' => $parent_term->term_id, 'orderby' => 'slug', 'hide_empty' => true )); if (!empty($child_cat_terms) && !is_wp_error($child_cat_terms)) { echo '<ul class="cat-child">'; foreach ($child_cat_terms as $child_term) { if ($child_term->count > 0): echo '<li><a href="' . get_term_link($child_term) . '"'; if ($child_term->slug == $product_cat) { echo ' class="page-cat"'; } echo '>' . $child_term->name . '</a></li>'; endif; } echo "</ul>"; } echo '</li>'; endif; } echo '</ul>';
关键修改说明
- 新增了当前分类父级链的获取逻辑,多层子分类场景下也能匹配到最顶层的父分类
- 用数组拼接class的方式替代原来重复写class属性的错误写法,避免HTML语法问题
- 删除了原a标签中
strpos匹配的逻辑,避免slug部分重合导致的误高亮问题
内容的提问来源于stack exchange,提问作者DaveDesigns
相关产品推荐
相关产品推荐

