为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);
代码说明:
- 判断页面类型:先用
is_product()确认当前是WooCommerce产品页面,避免在其他页面执行无效逻辑。 - 获取产品分类:通过
get_the_terms()拿到当前产品所属的所有产品分类,确保我们能找到对应的菜单关联项。 - 匹配菜单项:
- 首先检查菜单项是否直接对应产品的分类(
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
相关产品推荐
相关产品推荐

