在NAV_MENU_CS_CLASS上运行筛选器时出现空类属性问题

时间:2011-10-24 作者:N2Mystic

我使用下面的代码从自定义菜单中删除除当前菜单项和当前菜单父类之外的所有类。

它工作得很好,但是,我正在努力克服一个令人困扰的问题。某些菜单项以空类属性结尾:

<ul id="menu-site-menu" class="menu">
    <li id="menu-item-18" class="current-menu-item "><a href="http://localhost/r23">Home</a></li>
    <li id="menu-item-19" class=""><a href="http://localhost/r23/about-us/">About Us</a></li>
    <li id="menu-item-20" class=""><a href="http://localhost/r23/contact-us/">Contact Us</a></li>
</ul>
这可能没什么大不了的,但我宁愿不显示class属性。这可以通过对下面的代码进行较小的修改来完成吗?

add_filter(\'nav_menu_css_class\', \'clean_menu_classes\', 10, 2);

function clean_menu_classes($classes, $item) {
    $classes = array_filter( 
        $classes, 
        create_function( \'$class\', 
                 \'return in_array( $class, 
                      array( "current-menu-item", "current-menu-parent" ) );\' )
        );
    return array_merge(
        $classes,
        (array)get_post_meta( $item->ID, \'_menu_item_classes\', true )
        );
    }

1 个回复
最合适的回答,由SO网友:Maxim Krizhanovsky 整理而成

遗憾的是,没有能够克服此问题的过滤器。您必须重写的start\\u el函数the walker. 以下是原始来源:

$class_names = join( \' \', apply_filters( \'nav_menu_css_class\', array_filter( $classes ), $item, $args ) );
$class_names = \' class="\' . esc_attr( $class_names ) . \'"\';

$id = apply_filters( \'nav_menu_item_id\', \'menu-item-\'. $item->ID, $item, $args );
$id = strlen( $id ) ? \' id="\' . esc_attr( $id ) . \'"\' : \'\';

$output .= $indent . \'<li\' . $id . $value . $class_names .\'>\';
正如您所看到的,类总是附加的,并且只有当$classes 不为空

结束

相关推荐

Menu API not switching menus?

我正在使用菜单API,我想切换到其他菜单,但出于某种原因,它保留了第一个菜单这是我的密码在函数中。php add_action( \'init\', \'register_my_menus\',10 ); function register_my_menus() { register_nav_menu(\'main-navigation\', \'Main Navigation\'); } 下面是我的主题文件(header.ph