我有两个父菜单项,其中包含指向同一页面的相同子项(“ Persian Cats ”)。我想删除Wordpress添加的额外类,因为它为父项创建了两个活动状态。在前端,“ Cats ”& “宠物”正在突出显示,表示他们当前处于活动状态,或者其下有活动的项目。
我尝试使用jQuery删除它并且它可以工作,这是我唯一的问题,一瞬间它会将两个项目都设置为“活动”状态但是一旦文档完全加载,就会删除额外的类。 Javascript可能不是理想的解决方案。我需要在它写成html之前删除该类。
所以我想知道,如果在使用 wp_nav_menu()来调用菜单时,我可以使用过滤器或动作挂钩来移除额外的类。这是Wordpress的默认行为,当两个相同(指向同一页面)的项目处于活动状态时,它会向其各自的父项添加额外的“活动或当前”类作为活动。我想要发生的事情,即使它们存在于两个父项中,也应该只有一个活跃的父项。
这个问题更多的是Wordpress问题,而不是HTML。我尝试在项目处于活动状态时使用Javascript删除该额外的类,以便只能有一个活动的父项。但就像我说的那样,我忽略了这种方法,因为对于一秒钟,它显示为活动状态,然后当网站的某些部分加载时,它将删除活动状态。
谢谢!
答案 0 :(得分:0)
Wordpress提供function special_nav_class($classes, $item) {
static $current_class_already_added = false;
if (in_array('current-menu-item', $classes)) {
if (!$current_class_already_added) {
$current_class_already_added = true;
} else {
unset($classes[array_search('current-menu-item', $classes)]);
}
}
return $classes;
}
add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 2);
过滤器,允许addind和从每个菜单项中删除css类。
我没有测试以下代码,但它必须帮助您找到解决方案:
import {OnInit} from 'angular2/core';
export class MainMenu implements OnInit {
public menu = null;
public allLinks = null;
constructor(){
}
ngOnInit() {
this.menu = $('#menu');
this.allLinks = $('#menu').find('a');
this.menu.find('ul a').click(this.setItem.bind(this));
console.log('init MainMenu');
}
public setItem (e){
this.allLinks.removeClass('active');
$(e.currentTarget).addClass('active');
if($(e.currentTarget).hasClass('withNested')){
if($(e.currentTarget).hasClass('opened')){
$(e.currentTarget).removeClass('opened');
$(e.currentTarget).addClass('closed');
$(e.currentTarget).next('ul').slideUp();
}else{
$(e.currentTarget).removeClass('closed');
$(e.currentTarget).addClass('opened');
$(e.currentTarget).next('ul').slideDown();
}
}
}
}
希望它有所帮助!