Вопрос или проблема
Я вызываю wp_nav_menu
программно в классе и хотел бы иметь возможность установить поле, которое будет отображаться как current-menu-item
, но я не вижу аргумента для этого.
Похоже, я могу использовать nav_menu_css_class
?
Добавление условных классов к элементам меню
Этот пример позволяет добавить пользовательский класс к элементу меню на основе указанного вами условия. Не забудьте изменить условие.
<?php
add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 2);
function special_nav_class($classes, $item){
if(is_single() && $item->title == "Blog"){ //Обратите внимание, что вы можете изменить условие с is_single() и $item->title
$classes[] = "special-class";
}
return $classes;
}
?>
Также посмотрите на Как добавить пользовательский класс к элементу меню WordPress.
Ответ или решение
Для того чтобы программно установить класс current-menu-item
при использовании функции wp_nav_menu
в WordPress, можно воспользоваться хуком nav_menu_css_class
, который позволяет добавлять или изменять CSS-классы для элементов меню на основе определённых условий.
Пошаговая инструкция
-
Используйте hook
nav_menu_css_class
:Хук
nav_menu_css_class
предоставляется WordPress для изменения классов меню перед их выводом. Вы можете добавить свой собственный класс в зависимости от нужного условия. Вот пример кода:add_filter('nav_menu_css_class', 'set_current_menu_item_class', 10, 2); function set_current_menu_item_class($classes, $item) { // Условие для установки класса current-menu-item if (is_page('страница-с-вашей-названия')) { // Укажите вашу страницу или любое другое условие if ($item->title == 'Название элемента меню') { // Укажите название элемента меню, для которого нужно установить класс $classes[] = 'current-menu-item'; } } return $classes; }
В этом примере класс
current-menu-item
будет добавлен к элементу меню с названием "Название элемента меню", если открыта страница "страница-с-вашей-названия". -
Добавление логики:
Вы можете адаптировать логику в функции для установки класса
current-menu-item
. Например, вы можете использовать различные условия, такие какis_single()
,is_category()
, и т.д., для конкретизации, когда ваш элемент должен быть текущим. -
Применение изменений:
После того как вы добавили код в файл
functions.php
вашей темы или в ваш плагин, изменения должны вступить в силу. Убедитесь, что вы очищаете кеш вашего сайта, если используете какие-либо плагины кеширования, чтобы увидеть правильное отображение классов.
Дополнительная информация
- Кастомизация меню: Если вы хотите, вы также можете использовать другие хуки, такие как
nav_menu_item_id
иnav_menu_link_attributes
, для дальнейшей кастомизации элементов меню. - Тестирование: После завершения внесения изменений, протестируйте их на различных страницах, чтобы гарантировать работу кода.
Заключение
Используя приведенный выше подход с применением фильтра nav_menu_css_class
, вы можете программно устанавливать класс current-menu-item
для любого элемента меню в WordPress. Это позволит вам управлять визуальным отображением вашего меню в зависимости от текущей страницы или условий, что может серьёзно улучшить пользовательский опыт на вашем сайте.