如何通过删除所有属性来清理菜单li,但保持当前菜单项的“ class =“ active”`?

时间:2019-02-04 11:25:46

标签: php wordpress

使用wordpress制作简单的菜单;带有li的无序列表,并且不存在使HTML看起来更整洁的属性。但是,活动li(取决于用户所在的页面)应具有class="active"

我尝试在add_filter中更改functions.php的优先级参数。

这是删除class属性的第一段代码。

add_filter('nav_menu_css_class', 'my_css_attributes_filter', 10, 1);
function my_css_attributes_filter($var) {
    return is_array($var) ? array() : '';
}

这是第二个块,与第一个块具有相同的钩子nav_menu_css_class和相同的优先级参数10

add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 2);
function special_nav_class($classes, $item){
    if( in_array('current-menu-item', $classes) ){
                    $classes[] = 'active ';
    }
    return $classes;
}

在活动页面上,我想知道如何使我的li看起来像这样:

  <li class="active"></li>

如果我删除了add_filter('nav_menu_css_class', 'my_css_attributes_filter', 10, 1);,则出现了active类,但还有其他所有混乱:

<li class="menu-item menu-item-type-post_type_archive menu-item-object-news current-menu-item menu-item-42 active"> </li>

1 个答案:

答案 0 :(得分:0)

谢谢04FS,这是有效的方法:

这将删除id属性。     add_filter('nav_menu_item_id','my_css_attributes_filter',10,1);     add_filter('page_css_class','my_css_attributes_filter',10,1);

function my_css_attributes_filter($var) {
    return is_array($var) ? array() : '';
}

这会删除class属性的所有值,除了active

add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 2);
function special_nav_class($classes, $item){
    return in_array('current-menu-item', $classes) ? ['active'] : [];
}