Программно установить current-menu-item с помощью wp_nav_menu

Вопрос или проблема

Я вызываю 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-классы для элементов меню на основе определённых условий.

Пошаговая инструкция

  1. Используйте 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 будет добавлен к элементу меню с названием "Название элемента меню", если открыта страница "страница-с-вашей-названия".

  2. Добавление логики:

    Вы можете адаптировать логику в функции для установки класса current-menu-item. Например, вы можете использовать различные условия, такие как is_single(), is_category(), и т.д., для конкретизации, когда ваш элемент должен быть текущим.

  3. Применение изменений:

    После того как вы добавили код в файл functions.php вашей темы или в ваш плагин, изменения должны вступить в силу. Убедитесь, что вы очищаете кеш вашего сайта, если используете какие-либо плагины кеширования, чтобы увидеть правильное отображение классов.

Дополнительная информация

  • Кастомизация меню: Если вы хотите, вы также можете использовать другие хуки, такие как nav_menu_item_id и nav_menu_link_attributes, для дальнейшей кастомизации элементов меню.
  • Тестирование: После завершения внесения изменений, протестируйте их на различных страницах, чтобы гарантировать работу кода.

Заключение

Используя приведенный выше подход с применением фильтра nav_menu_css_class, вы можете программно устанавливать класс current-menu-item для любого элемента меню в WordPress. Это позволит вам управлять визуальным отображением вашего меню в зависимости от текущей страницы или условий, что может серьёзно улучшить пользовательский опыт на вашем сайте.

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

Капча загружается...