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

zte4gxcn  于 2023-04-11  发布在  WordPress
关注(0)|答案(1)|浏览(160)

我有两个父菜单项,其中包含指向同一页面的相同子项(“Persian Cats”)。我想删除Wordpress添加的额外类,因为它为父菜单项创建了两个活动状态。在前端,“Cats”和“Pets”都被突出显示,表明它们当前处于活动状态,或者它们下面有活动的项目。
我尝试使用jQuery来删除它,它的工作,我唯一的问题与该方法,在一瞬间,它会设置两个项目为'活动'状态,但一旦文档完全加载,这只是当它删除额外的类。Javascript可能不是这个理想的解决方案。我需要删除类之前,它的书面作为html。
所以我想知道,当我使用**wp_nav_menu时,是否有一个过滤器或操作钩子可以用来删除额外的类()**调用菜单。这是Wordpress的默认行为,当两个项目完全相同时(指向同一个页面)都是活动的,它会将额外的类“活动或当前”添加到它们各自的父类中作为活动的。我想发生的是,应该只有一个活动的父项,即使它们存在于两个父项中。
这个问题更像是WordPress的问题,而不是HTML。我试过在项目处于活动状态时使用Javascript来删除这个额外的类,这样就只能有一个父项目处于活动状态。但是就像我说的,我不同意这种方法,因为在一瞬间,它显示为活动状态,然后当网站的某些部分加载时,它会删除活动状态。
谢谢大家!

zzlelutf

zzlelutf1#

WordPress提供了nav_menu_css_class过滤器,允许从每个菜单项添加和删除css类。
我没有测试下面的代码,但它必须帮助你找到解决方案:

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

希望有帮助!

相关问题