是否有Wordpress过滤器可以删除某些菜单项上的类?

时间:2016-03-09 19:49:23

标签: php html wordpress

enter image description here

我有两个父菜单项,其中包含指向同一页面的相同子项(“ Persian Cats ”)。我想删除Wordpress添加的额外类,因为它为父项创建了两个活动状态。在前端,“ Cats ”& “宠物”正在突出显示,表示他们当前处于活动状态,或者其下有活动的项目。

我尝试使用jQuery删除它并且它可以工作,这是我唯一的问题,一瞬间它会将两个项目都设置为“活动”状态但是一旦文档完全加载,就会删除额外的类。 Javascript可能不是理想的解决方案。我需要在它写成html之前删除该类。

所以我想知道,如果在使用 wp_nav_menu()来调用菜单时,我可以使用过滤器或动作挂钩来移除额外的类。这是Wordpress的默认行为,当两个相同(指向同一页面)的项目处于活动状态时,它会向其各自的父项添加额外的“活动或当前”类作为活动。我想要发生的事情,即使它们存在于两个父项中,也应该只有一个活跃的父项。

这个问题更多的是Wordpress问题,而不是HTML。我尝试在项目处于活动状态时使用Javascript删除该额外的类,以便只能有一个活动的父项。但就像我说的那样,我忽略了这种方法,因为对于一秒钟,它显示为活动状态,然后当网站的某些部分加载时,它将删除活动状态。

谢谢!

1 个答案:

答案 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();
            }
        }
    }

}

希望它有所帮助!