我使用下面的代码从自定义菜单中删除除当前菜单项和当前菜单父类之外的所有类。
它工作得很好,但是,我正在努力克服一个令人困扰的问题。某些菜单项以空类属性结尾:
<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 )
);
}
最合适的回答,由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
不为空