wp_nav_menu_objects
Дозволяє змінити відсортований список об’єктів пунктів меню, перш ніж на їх основі буде згенеровано HTML-код меню.
Використання
add_filter( 'wp_nav_menu_objects', 'wp_kama_nav_menu_objects_filter', 10, 2); /** * Function for `wp_nav_menu_objects` filter-hook. * * @param array $sorted_menu_items Докладно про те, що я маю menu order. * @param stdClass $args An object containing wp_nav_menu() arguments. * * @return array */ function wp_kama_nav_menu_objects_filter( $sorted_menu_items, $args ){ // Filter... return $sorted_menu_items; }
-
$sorted_menu_items
(масив) -
Масив із об’єктами елементів меню, відсортованих за ключом
menu_order
. Тобто, порядок елементів повторює порядок пунктів, виставлених в адмін-панелі при створенні меню. -
$args
(stdClass) -
Об’єкт параметрів, переданих функції
wp_nav_menu() .
Приклади
#1 Видалимо один із пунктів меню
Завдання: для авторизованих користувачів потрібно видалити пункти, які ведуть на сторінку авторизації з усіх меню. Знаючи ID цієї сторінки, це можна зробити так:
## Видалимо один із пунктів меню add_filter( 'wp_nav_menu_objects', 'change_nav_menu_objects', 10, 2); function change_nav_menu_objects( $sorted_menu_items, $args ) { foreach ( $sorted_menu_items as $index => $item ) { if ( is_user_logged_in() && 'page' == $item->object && 214 == $item->object_id ) { unset($sorted_menu_items[$index]); } } return $sorted_menu_items; }
#2 Додамо батьківським елементам меню свій css клас
add_filter( 'wp_nav_menu_objects', 'add_css_class_for_menu_item_has_child_elements' ); function add_css_class_for_menu_item_has_child_elements( $items ) { // Збираємо ID пунктів меню, які мають дочірні елементи $parents = wp_list_pluck( $items, 'menu_item_parent' ); foreach ($ items as $ item) { // Перевіряємо, чи відноситься до них поточний в циклі пункт меню і додаємо css клас if ( in_array( $item->ID, $parents ) ) { $item->classes[] = 'has-child-elements'; } } return $items; }
#3 Додамо активному елементу меню свій css клас
Активним елементом меню називають той, на сторінці якого знаходиться користувач.
add_filter( 'wp_nav_menu_objects', 'add_css_class_for_current_menu_item' ); function add_css_class_for_current_menu_item( $items ) { foreach ($ items as $ item) { if ($ item-> current) { $item->classes[] = 'current-element'; } } return $items; }
список змін
З версії 3.1.0 | Введено. |
Де викликається хук
wp_nav_menu_objects
Де використовується хук у WordPress
Використання не знайдено.