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

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>';

关键修改说明

  1. 新增了当前分类父级链的获取逻辑,多层子分类场景下也能匹配到最顶层的父分类
  2. 用数组拼接class的方式替代原来重复写class属性的错误写法,避免HTML语法问题
  3. 删除了原a标签中strpos匹配的逻辑,避免slug部分重合导致的误高亮问题

内容的提问来源于stack exchange,提问作者DaveDesigns

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:45:03