WordPress默认CSS类输出示例:
<li id="menu-item-55" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-55">
<li class="page_item page-item-37">
菜单和页面列表项带有各种自己的li类和id。
如何在functions.php文件中的菜单和页面列表中删除它们?
#1
你应该能够通过挂接到几个过滤器并返回空数组或字符串而不是新类或id来删除它们:
add_filter('nav_menu_css_class', 'my_css_attributes_filter', 100, 1);
add_filter('nav_menu_item_id', 'my_css_attributes_filter', 100, 1);
add_filter('page_css_class', 'my_css_attributes_filter', 100, 1);
function my_css_attributes_filter($var) {
return is_array($var) ? array() : '';
}
如果要保留特定的类, 可以执行以下操作:
function my_css_attributes_filter($var) {
return is_array($var) ? array_intersect($var, array('current-menu-item')) : '';
}
#2
这是理查德答案的基础。
如果你想将当前菜单项类更改为其他内容。
add_filter('nav_menu_css_class', 'my_css_attributes_filter', 100, 1);
add_filter('nav_menu_item_id', 'my_css_attributes_filter', 100, 1);
function my_css_attributes_filter($var) {
if(is_array($var)){
$varci= array_intersect($var, array('current-menu-item'));
$cmeni = array('current-menu-item');
$selava = array('selectedmenu');
$selavaend = array();
$selavaend = str_replace($cmeni, $selava, $varci);
}
else{
$selavaend= '';
}
return $selavaend;
}
#3
这是我提出的修复程序。它从wp_nav_menu中删除了所有ID和类, 但允许你提出自己的”批准的”类和/或ID列表。它还将冗长的”当前菜单项”更改为”活动”。如果你希望保留默认的WordPress CSS样式, 只需删除该部分代码即可。为了使这篇文章最少, 下面是带有代码的pastebin的链接:
http://pastebin.com/W16cxDfY-适用于你的functions.php文件
http://pastebin.com/CGx4aprf-适用于模板(无论菜单位于何处)
#4
只需add_filter(‘nav_menu_item_id’, ‘__return_false’);菜单项ID
#5
去除li的最好方法是:经过测试和验证
<?php
$menuParameters = array(
'theme_location' => 'header-menu-top', 'container' => false, 'echo' => false, 'items_wrap' => '%3$s', 'depth' => 0, );
echo strip_tags(wp_nav_menu( $menuParameters ), '<a>' );
?>
#6
如果你只想删除所有列表类和ID, 请将其添加到functions.php
add_filter('nav_menu_item_id', 'filter_menu_id');
add_filter( 'nav_menu_css_class', 'filter_menu_li' );
function filter_menu_li(){
return array('');
}
function filter_menu_id(){
return;
}
#7
理查德的答案的补充:我们需要清理留下的空类:
//Strip Empty Classes
add_filter ('wp_nav_menu', 'strip_empty_classes');
function strip_empty_classes($menu) {
$menu = preg_replace('/ class=(["\'])(?!active).*?\1/', '', $menu);
return $menu;
}
#8
我的解决方案:
$defaults = array(
'theme_location' => '', 'menu' => '', 'container' => '', 'container_class' => '', 'container_id' => '', 'menu_class' => '', 'menu_id' => '', 'echo' => false, // param important
'fallback_cb' => 'wp_page_menu', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', 'items_wrap' => '', 'depth' => -1, 'walker' => ''
);
ob_start();
echo preg_replace( '#<li[^>]+>#', '<li>', wp_nav_menu( $defaults ) );
$mainNav = ob_get_clean();
// In the page :
echo $mainNav;
评论前必须登录!
注册