удалить li class & id для пунктов меню и списка страниц - PullRequest
19 голосов
/ 07 марта 2011

Пример вывода класса CSS WordPress по умолчанию:

<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 class и id.

Как удалить их в functions.php файле для меню и для списка страниц?

Ответы [ 8 ]

42 голосов
/ 08 марта 2011

Вы можете удалить их, подключив пару фильтров и возвращая пустые массивы или строки, а не новые классы или идентификаторы:

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')) : '';
}
4 голосов
/ 30 октября 2011

это дополнение к ответу Ричарда.

в случае, если вы хотите изменить класс элемента текущего меню на что-то другое.

        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 голосов
/ 02 мая 2012

Вот исправление, которое я придумала. Он удаляет все идентификаторы и классы из wp_nav_menu, но позволяет вам создать свой собственный «одобренный» список классов и / или идентификаторов. Он также изменяет длительность «current-menu-item» на «active». Если вы предпочитаете сохранять стили WordPress CSS по умолчанию, просто удалите этот раздел кода. Для того, чтобы сохранить этот пост минимальным, вот ссылки на pastebin с кодом:
http://pastebin.com/W16cxDfY - для вашего файла functions.php
http://pastebin.com/CGx4aprf - для вашего шаблона, куда бы ни направлялось меню

1 голос
/ 03 ноября 2013

просто add_filter('nav_menu_item_id', '__return_false'); для идентификатора пункта меню

0 голосов
/ 25 мая 2019

Лучший способ удалить 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>' );
            ?>
0 голосов
/ 02 января 2016

Мое решение:

$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;
0 голосов
/ 24 июня 2015

Если вы просто хотите удалить все классы списка и идентификаторы, добавьте это в 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; 
}
0 голосов
/ 08 января 2012

дополнение к ответу Ричарда: нам нужно убрать оставшиеся пустые классы:

//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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...