nav_menu_css_class
Дозволяє змінювати набір CSS класів у пункті меню.
Про те, як формуються css класи у пунктах меню, читайте в документації до функції wp_nav_menu() .
Використання
add_filter( 'nav_menu_css_class', 'wp_kama_nav_menu_css_class_filter', 10, 4); /** * Function for `nav_menu_css_class` filter-hook. * * @param string[] $classes Array of the CSS classes, що є applied to menu menu's `<li>` element. * @param WP_Post $menu_item Текущее меню елемент об'єкта. * @param stdClass $args An object of wp_nav_menu() arguments. * @param int $depth Відомості про меню. Використовується для padding. * * @return string[] */ function wp_kama_nav_menu_css_class_filter( $classes, $menu_item, $args, $depth ){ // Filter... return $classes; }
-
$classes
(масив) Класи CSS, які застосовуються до <li> пункту меню. Приклад:
Array( [1] => menu-item [2] => menu-item-type-post_type [3] => menu-item-object-page [4] => menu-item-265 )
-
$item
(WP_Post) Об’єкт поточного меню. Приклад:
-
$args
(stdClass) Об’єкт з аргументами функції wp_nav_menu() . Приклад:
-
$depth
(число) - Рівень пункту меню. Доданий до версії 4.1.0. Використовується для відступів. Верхні пункти меню мають $depth = 0, вкладені у яких $depth = 1 тощо.
Приклади
#1 Додамо CSS клас тільки певному пункту меню
Нехай нам потрібно додати до пункту меню “Зворотній зв’язок” (id=265) додатковий CSS клас, причому тільки якщо цей пункт виводиться в меню, прикріпленому до області меню primary
, тоді:
add_filter( 'nav_menu_css_class', 'change_menu_item_css_classes', 10, 4); function change_menu_item_css_classes( $classes, $item, $args, $depth ) { if( 265 === $item->ID && 'primary' === $args->theme_location ){ $classes[] = 'special-css-class'; } return $classes; }
Отримаємо у верстці:
<ul id="menu-moe-pervoe-menu" class="primary-menu"> <li id="menu-item-265" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-265 special-css-class"> <a href="http://wp-test.ru/post-99">Зворотній зв'язок</a> </li> <li id="menu-item-266" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-266"> <a href="http://wp-test.ru/post-98">Всі статті</a> </li> <li id="menu-item-267" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-267"> <a href="http://wp-test.ru/post-97">Мапа сайту</a> </li> </ul>
#2 Видалимо CSS класи у всіх пунктах меню
Видалимо всі класи CSS у всіх пунктів меню сайту.
add_filter( 'nav_menu_css_class', '__return_empty_array');
Отримаємо верстку:
<ul id="menu-moe-pervoe-menu" class="primary-menu"> <li id="menu-item-265"> <a href="http://wp-test.ru/post-99">Зворотній зв'язок</a> </li> <li id="menu-item-266"> <a href="http://wp-test.ru/post-98">Всі статті</a> </li> <li id="menu-item-267"> <a href="http://wp-test.ru/post-97">Мапа сайту</a> </li> </ul>
Щоб видалити або змінити CSS атрибут id у меню, використовуйте фільтр nav_menu_item_id .
Так само, як і в першому прикладі, можна використовувати умови. Видалимо у всіх пунктів меню CSS класи, а пунктам меню з області меню primary додамо свій css клас:
add_filter( 'nav_menu_css_class', 'change_menu_item_css_classes', 10, 4); function change_menu_item_css_classes( $classes, $item, $args, $depth ) { if ( 'primary' === $args->theme_location ) { $classes = ['my-css']; } else { $classes = []; } return $classes; }
Отримаємо верстку:
<ul id="menu-moe-pervoe-menu" class="primary-menu"> <li id="menu-item-265" class="my-css"> <a href="http://wp-test.ru/post-99">Зворотній зв'язок</a> </li> <li id="menu-item-266" class="my-css"> <a href="http://wp-test.ru/post-98">Всі статті</a> </li> <li id="menu-item-267" class="my-css"> <a href="http://wp-test.ru/post-97">Мапа сайту</a> </li> </ul>
нотатки
- C версії 4.1.0 було додано параметр $depth .
список змін
З версії 3.0.0 | Введено. |
З версії 4.1.0 | The $depth parameter був added. |
Де викликається хук
Де використовується хук у WordPress
Використання не знайдено.