Убираем лишние классы из wp_nav_menu

По умолчанию Вордпресс добавляет очень много классов к элементам меню, выводимым функцией wp_nav_menu, и как правило большинство из них, а иногда и вообще все, просто не нужны.

Убрать их можно, написав собственный walker, однако код этого класса будет не менее громоздким, чем все эти лишние классы в меню.

Есть более элегантное решение, используем фильтры:

  • nav_menu_css_class для удаления классов
  • nav_menu_item_id для удаления id
  • page_css_class для удаления классов связанных со страницами (Pages)

[php]add_filter(‘nav_menu_css_class’, ‘my_css_attributes_filter’);
add_filter(‘nav_menu_item_id’, ‘my_css_attributes_filter’);
add_filter(‘page_css_class’, ‘my_css_attributes_filter’);
function my_css_attributes_filter($var) {
return is_array($var) ? array() : ”;
}
[/php]

Данный код полностью удаляет все классы и id из тегов пунктов меню. Его нужно добавить куда-нибудь в файл functions.php вашей темы.

Также есть возможность сделать исключения для некоторых классов, например для menu-item или current-menu-item. Для этого изменим код таким образом:
[php]add_filter(‘nav_menu_css_class’, ‘my_css_attributes_filter’);
add_filter(‘nav_menu_item_id’, ‘my_css_attributes_filter’);
add_filter(‘page_css_class’, ‘my_css_attributes_filter’);
function my_css_attributes_filter( $var ) {
$allow = array(
‘current-menu-item’,
‘menu-item’
);
return is_array( $var ) ? array_intersect( $var, $allow ) : ”;
}
[/php]
В массиве $allow перечислите все классы, которые вам нужно оставить.

Если есть задача убрать только id из wp_nav_menu, то функцию можно не использовать, а поставить вот такой фильтр:
[php]add_filter(‘nav_menu_item_id’, ‘__return_false’);[/php]