Intereting Posts
Почему эти импортированные изображения не появятся? Поместите заголовок страницы в короткий код Предоставление пользователю возможности динамически создавать поля с помощью API настроек Удаление функции анонимного wp_users не работает? Как управлять параметрами шрифта заголовка, расположенными в редакторе wysiwyg для сообщений и страниц Пользовательская страница администрирования таксономии InfiiniteWP и WP Networks (multisite) Как добавить класс в мета-окна (чтобы настроить их в CSS)? Изменение встроенного поведения функциональности тега ajax типа «вперед» WordPress Лучший способ вызвать функцию из пользовательского шаблона WooCommerce Несколько кодов Google Analytics для отдельных страниц Внедрение JavaScript в сообщение с WP3.x Не удалось сравнить даты в meta_query API-интерфейс плагина SVN и обновления – как идентифицируются плагины? Просмотр прикрепленных файлов в верхней части single.php

Добавить класс в активный элемент и его родительский элемент в навигационном меню

Я использую следующий код, чтобы добавить имя класса «active» к текущему пункту меню:

add_filter('nav_menu_css_class', 'add_active_class', 10, 2 ); function add_active_class($classes, $item) { if( $item->menu_item_parent == 0 && in_array('current-menu-item', $classes) ) { $classes[] = "active"; } return $classes; } 

Это работает как шарм, но только для предметов без выпадающего списка. Если в нем есть элемент с дочерними элементами, он не добавит активный класс к родительскому элементу.

Есть ли способ изменить этот код, чтобы фильтр добавлял «активный» класс как к текущей ссылке, так и к родительской?

Solutions Collecting From Web of "Добавить класс в активный элемент и его родительский элемент в навигационном меню"

В зависимости от контекста, в котором вы нуждаетесь, и отработки кода, который у вас есть, вы можете попробовать следующее:

 add_filter('nav_menu_css_class', 'add_active_class', 10, 2 ); function add_active_class($classes, $item) { $class_names = array( 'current-menu-item', 'current-menu-ancestor', 'current-menu-parent', 'current_page_parent', 'current_page_ancestor' ); if( $item->menu_item_parent == 0 && in_array( $class_names, $classes) ) { $classes[] = "active"; } return $classes; } 

UPDATE: если выше не работает из-за массива как игла для функции in_array из-за версии PHP, попробуйте сделать код ниже:

 add_filter('nav_menu_css_class', 'add_active_class', 10, 2 ); function add_active_class($classes, $item) { if( $item->menu_item_parent == 0 && in_array( 'current-menu-item', $classes ) || in_array( 'current-menu-ancestor', $classes ) || in_array( 'current-menu-parent', $classes ) || in_array( 'current_page_parent', $classes ) || in_array( 'current_page_ancestor', $classes ) ) { $classes[] = "active"; } return $classes; } 

Если вы хотите, чтобы в текущем элементе был активен класс, вы можете сделать это:

 add_filter('nav_menu_css_class', 'add_active_class', 10, 2 ); function add_active_class($classes, $item) { if( in_array( 'current-menu-item', $classes ) || in_array( 'current-menu-ancestor', $classes ) || in_array( 'current-menu-parent', $classes ) || in_array( 'current_page_parent', $classes ) || in_array( 'current_page_ancestor', $classes ) ) { $classes[] = "active"; } return $classes; }