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,
]);
?>