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

为WordPress及WooCommerce菜单项设置唯一类名求助

解决WooCommerce产品页面父分类菜单高亮问题

我来帮你搞定这个WooCommerce产品分类菜单高亮的问题!你之前的代码只是给所有产品页面的菜单项加了测试类,但没关联到当前产品所属的具体分类,所以没法精准高亮对应的父分类菜单项。

试试这个修改后的函数,它会自动匹配当前产品所属的分类(包括父分类),给对应的菜单项加上高亮类:

function highlight_product_category_menu_item($classes, $item) {
    // 仅在产品页面执行逻辑
    if (is_product()) {
        global $post;
        // 获取当前产品的所有产品分类
        $product_categories = get_the_terms($post->ID, 'product_cat');
        
        if ($product_categories && !is_wp_error($product_categories)) {
            foreach ($product_categories as $category) {
                // 情况1:菜单项就是当前产品的分类,直接加高亮类
                if ($item->object_id == $category->term_id) {
                    $classes[] = 'current-menu-item';
                    // 可以再加自定义类,比如你之前的测试类
                    $classes[] = 'current-menu-item-test';
                    break;
                }
                
                // 情况2:如果产品属于子分类,给父分类菜单项加高亮
                if ($category->parent !== 0) {
                    $parent_category = get_term($category->parent, 'product_cat');
                    if ($item->object_id == $parent_category->term_id) {
                        $classes[] = 'current-menu-parent';
                        $classes[] = 'current-menu-item-test';
                        break;
                    }
                }
            }
        }
    }
    return $classes;
}
add_filter('nav_menu_css_class', 'highlight_product_category_menu_item', 10, 2);

代码说明:

  1. 判断页面类型:先用is_product()确认当前是WooCommerce产品页面,避免在其他页面执行无效逻辑。
  2. 获取产品分类:通过get_the_terms()拿到当前产品所属的所有产品分类,确保我们能找到对应的菜单关联项。
  3. 匹配菜单项:
    • 首先检查菜单项是否直接对应产品的分类(item->object_id等于分类的term_id),是的话就添加WordPress默认的current-menu-item类(这个类自带默认高亮样式,也可以保留你自己的current-menu-item-test类)。
    • 如果产品属于子分类,我们会获取它的父分类,再检查菜单项是否是这个父分类,是的话添加current-menu-parent类,让父分类菜单也高亮。

注意事项:

  • 确保你的菜单项是直接关联WooCommerce产品分类(后台菜单设置里选择“产品分类”下的分类,而不是自定义链接),这样item->object_id才会对应分类的ID。
  • 如果你用了自定义主题,可能需要检查主题的CSS是否对current-menu-item或current-menu-parent类设置了高亮样式,如果没有,你可以自己添加:
.current-menu-item, .current-menu-parent {
    color: #ff0000; /* 替换成你想要的高亮颜色 */
    font-weight: bold;
}
  • 建议用子主题或者自定义代码插件来添加这个函数,避免主题更新时代码丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:35:29