Добавить класс к пунктам меню для одного конкретного меню (nav_menu_css_class)
Этот код добавляет дополнительный класс ко всем пунктам моего меню:
add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 2);
function special_nav_class($classes, $item){
$classes[] = 'btn'; // Добавляем класс 'btn' к каждому пункту меню
return $classes;
}
Как ограничить действие этого фильтра только главным меню (с расположением 'primary-menu')?
С уважением,
Даниэль
Я также пытался решить эту проблему и в процессе поиска решения обнаружил, что фильтр nav_menu_css_class
на самом деле принимает третий параметр. Это объект, содержащий переменные, связанные с вашим меню, включая переменную theme_location
, которую вы можете использовать для условного применения классов к конкретному меню. Вам просто нужно убедиться, что вы установили theme_location
при вызове wp_nav_menu в вашей теме.
Вот пример:
add_filter( 'nav_menu_css_class', 'special_nav_class', 10, 3 );
function special_nav_class( $classes, $item, $args ) {
if ( 'primary-menu' === $args->theme_location ) {
$classes[] = 'btn';
}
return $classes;
}

Я наткнулся на эту тему, пытаясь решить такую же проблему - вот что у меня получилось. Я не знаю, насколько хорошо это работает, поскольку функция будет вызываться для каждого пункта меню, но, похоже, меню в WordPress организованы как таксономии, и поэтому можно использовать функцию has_term()
, чтобы определить, находится ли пункт в определённом меню, и get_nav_menu_locations()
, чтобы получить список меню и их расположений в теме.
Модифицируя ваш код:
add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 2);
function special_nav_class($classes, $item){
$menu_locations = get_nav_menu_locations();
if ( has_term($menu_locations['primary-menu'], 'nav_menu', $item) ) {
$classes[] = 'btn';
}
return $classes;
}

Добавьте это в файл function.php, и все будет работать
add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 2);
function special_nav_class ($classes, $item) {
$classes[] = 'nav__link';
if (in_array('current-menu-item', $classes) ){
$classes[] = 'nav__link-active';
}
return $classes;
}
