首页 > 解决方案 > 如何通过删除所有属性来清理菜单 li,但为当前菜单项保留 `class="active"`?

问题描述

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

我试过改变 in 的优先级add_filter参数functions.php

这是删除类属性的第一个代码块。

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>

标签: phpwordpress

解决方案


谢谢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'] : [];
}

推荐阅读