Подтвердить что ты не робот

Удалить класс li и идентификатор для элементов меню и списка страниц

Пример вывода класса 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">

Элемент списка меню и страниц поставляется с различными ликами class и id.

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

4b9b3361

Ответ 1

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

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

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

Если вы просто хотите удалить все классы списка и идентификаторы, добавьте это в 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

Мое решение:

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

Ответ 8

Лучший способ удалить 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>' );
            ?>