Site Loader

WordPress добавляет свои классы, часто с ненужными id для тегов <ul> и <li>, попробуем избавиться от них и ещё добавим класс тегу <a>.
Убираем id у тега <li>, код добавляем в functions.php:

add_filter('nav_menu_item_id', function ($id, $item, $args, $depth) {
  return '';
}, 10, 4);

Теперь избавимся от лишних классов у тега <li> и добавим ему класс nav-item, проверив, что всё это мы делаем только для верхнего меню:

add_filter('nav_menu_css_class', function ($classes, $item, $args, $depth) {
  if ($args->theme_location === 'header') {
    $classes = ['nav-item'];
  };
  return $classes;
}, 10, 4);

Переходим к тегу <a>. Нам надо проверить, что все действия мы делаем в верхнем меню, так же надо сохранить существующие классы у ссылки, если они есть, и добавить свой класс nav-link, а для активной ссылки ещё и класс nav-item-active:

add_filter('nav_menu_link_attributes', function ($attrs, $item, $args, $depth) {
  if ($args->theme_location === 'header') {
    if ( !isset( $attrs['class'] ) ) {
      $attrs['class'] = '';
    }
    $attrs['class'] .= ' nav-link';
    if ( $attrs['aria-current'] === 'page' ) {
      $attrs['class'] .= ' nav-item-active';
    }
    $attrs['class'] = trim($attrs['class']);
  };
  return $attrs;
}, 10, 4);

И последнее нам надо убрать классы с id у тега <ul>. Для этого в файле header.php в функции wp_nav_menu добавляем свой items_wrap:

<?php
  wp_nav_menu([
    'theme_location'  => 'header',
    'container'       => false,
    'menu_class'      => 'nav nav-menu menu-header',
    'fallback_cb'     => '__return_empty_string',
    'items_wrap'      => '<ul class="navbar-nav mt-0 %2$s">%3$s</ul>',
    'depth'           => 2,
  ]);
?>

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *