Wp_nav_menu_objects — Позволяет изменить отсортированный список объектов пунктов меню, прежде чем на их основе будет сгенерирован HTML-код меню. Хук-фильтр WordPress

Опубликовано: 01.09.2018

Позволяет изменить отсортированный список объектов пунктов меню, прежде чем на их основе будет сгенерирован HTML-код меню.

Использование

add_filter( 'wp_nav_menu_objects', 'filter_function_name_8034', 10, 2 ); function filter_function_name_8034( $sorted_menu_items, $args ){ // Делаем что-либо... 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; }

Где используется хук

... if ( isset( $menu_items_with_children[ $menu_item->ID ] ) ) $menu_item->classes[] = 'menu-item-has-children'; } } unset( $menu_items, $menu_item ); /** * Filters the sorted list of menu item objects before generating the menu's HTML. * * @since 3.1.0 * * @param array $sorted_menu_items The menu items, sorted by each menu item's menu order. * @param stdClass $args An object containing wp_nav_menu() arguments. */ $sorted_menu_items = apply_filters( 'wp_nav_menu_objects', $sorted_menu_items, $args ); $items .= walk_nav_menu_tree( $sorted_menu_items, $args->depth, $args ); unset($sorted_menu_items); // Attributes if ( ! empty( $args->menu_id ) ) { $wrap_id = $args->menu_id; } else { $wrap_id = 'menu-' . $menu->slug; while ( in_array( $wrap_id, $menu_id_slugs ) ) { if ( preg_match( '#-(\d+)$#', $wrap_id, $matches ) ) $wrap_id = preg_replace('#-(\d+)$#', '-' . ++$matches[1], $wrap_id ); else $wrap_id = $wrap_id . '-1'; } ... campusboy 2826 — youtube.com/c/wpplus

Создатель YouTube канала wp-plus, на котором делюсь своими опытом. Активный пользователь wp-kama.ru. WordPress-разработчик. Разработка сайтов и лендингов. Доработка существующих проектов. Сопровождение ресурсов.

rss