删除li class&菜单项和页面列表的ID

时间:2011-03-07 16:25:01

标签: wordpress wordpress-theming

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 classid

如何在functions.php文件中删除菜单和页面列表?

8 个答案:

答案 0 :(得分:42)

您应该能够通过挂钩几个过滤器并返回空数组或字符串而不是新类或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')) : '';
}

答案 1 :(得分:4)

这是理查德回答的补充。

如果您想将current-menu-item类更改为其他类。

        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;
        }

答案 2 :(得分:2)

这是我提出的修复方法。它会从wp_nav_menu中删除所有id和类,但允许您提出自己的“已批准”类和/或ID列表。它还将冗长的“当前菜单项”更改为“活动”。如果您希望保留默认的WordPress CSS样式,只需删除该部分代码即可。为了保持这个帖子的最小化,以下是带有代码的pastebin链接:
http://pastebin.com/W16cxDfY - 用于您的functions.php文件
http://pastebin.com/CGx4aprf - 您的模板,无论菜单在哪里

答案 3 :(得分:1)

对于菜单项ID

,只需add_filter('nav_menu_item_id', '__return_false');

答案 4 :(得分:0)

理查德回答的补充: 我们需要清理留下的空类:

//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;
}

答案 5 :(得分:0)

如果您只想删除所有列表类和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; 
}

答案 6 :(得分:0)

我的解决方案:

$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;

答案 7 :(得分:0)

去除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>' );
            ?>