wp_get_nav_menu_items()
Получает элементы меню навигации в виде массива, который затем можно обработать.
Возвращает все элементы (ссылки) указанного меню навигации, которое создается в панели: Внешний вид > Меню
.
Передав название, ID или слаг меню, функция получит элементы меню навигации.
Хуки из функции
Возвращает
Массив|false
. Массив данных о ссылках. False, когда меню нет.
Шаблон использования
$items = wp_get_nav_menu_items( 5, [ 'output_key' => 'menu_order', ] );
Использование
wp_get_nav_menu_items( $menu, $args );
- $menu(строка/объект) (обязательный)
- ID меню или объект меню (термина).
Идентификатор, который задается при регистрации меню (menu location) — указывать нельзя. - $args(массив)
Аргументы в виде массива, которые формируют выводимые данные.
По умолчанию: дефолтные параметры
-
$order(строка)
Направление сортировки: ASC или DESC. Это параметр сортировки для запроса get_posts().
По умолчанию: 'ASC' -
$orderby(строка)
Поле по которому сортировать. Это параметр для запроса get_posts().
Дополнительное поле по которому сортировать также можно указать в параметре 'output_key'. Подробнее читайте в параметре $output_key.
По умолчанию: 'menu_order' -
$output(строка)
В каком виде нужно получить элементы.При ARRAY_A к каждому элементу меню (объекту) добавиться еще одно свойство (поле сортировки). Название добавляемого свойства указывается в параметре $output_key. В значении нового свойства будет число - порядковый номер элемента меню. Также элементы меню будут отсортированы с помощью функции wp_list_sort() по полю $output_key с направлением ASC.
Другими словами, при ARRAY_A, элементы меню сортируются отдельно, через функцию wp_list_sort(), по полю $output_key с направлением ASC. И порядковый номер элемента меню добавляется в объект элемента в новое свойство $item->$output_key
По умолчанию: ARRAY_A -
$output_key(строка)
Ключ (поле) по которому сортировать элементы меню. Этот ключ не используется в get_posts(), а работает только в этой функции.
По умолчанию: 'menu_order' -
$post_type(строка)
Тип записи, в котором сохраняются элементы меню.
По умолчанию: 'nav_menu_item' -
$post_status(строка)
Статус записи, в которой сохраняются элементы меню.
По умолчанию: 'publish' - $nopaging(true/false)
Извлекать ли все пункты меню (true) или разбивать на страницы (false).
По умолчанию: true
-
Примеры
#1 Пример построения простого списка меню
// Получим элементы меню на основе параметра $menu_name (тоже что и 'theme_location' или 'menu' в аргументах wp_nav_menu) // Этот код - основа функции wp_nav_menu, где получается ID меню из слага $menu_name = 'custom_menu_slug'; $locations = get_nav_menu_locations(); if( $locations && isset( $locations[ $menu_name ] ) ){ // получаем элементы меню $menu_items = wp_get_nav_menu_items( $locations[ $menu_name ] ); // создаем список $menu_list = '<ul id="menu-' . $menu_name . '">'; foreach ( (array) $menu_items as $key => $menu_item ){ $menu_list .= '<li><a href="' . $menu_item->url . '">' . $menu_item->title . '</a></li>'; } $menu_list .= '</ul>'; } else { $menu_list = '<ul><li>Меню "' . $menu_name . '" не определено.</li></ul>'; }
#2 Какие данные содержит возвращаемый объект
Не имеет значения какая ссылка добавлена в меню в админке: пост, таксономия или произвольная ссылка. Все они сохраняются в таблице wp_posts c одинаковыми полями (поля меню).
Многие из полей попросту не нужны и не имеют смысла, потому что относятся к записям. Используйте последние значения начиная с db_id
они определяют пункт меню.
$items = wp_get_nav_menu_items( 654 ); print_r( $items ); /* выведет: Array ( [1] => WP_Post Object ( // это поля поста использовать их не универсально... [ID] => 6364 [post_author] => 1 [post_date] => 2015-12-06 12:20:18 [post_date_gmt] => 2015-12-06 07:20:18 [post_content] => [post_title] => Произвольная ссылка 2 [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => proizvolnaya-ssylka-2 [to_ping] => [pinged] => [post_modified] => 2015-12-06 12:20:18 [post_modified_gmt] => 2015-12-06 07:20:18 [post_content_filtered] => [post_parent] => 0 [guid] => http://wp-kama.ru/id_6364/proizvolnaya-ssylka-2.html [menu_order] => 4 [post_type] => nav_menu_item [post_mime_type] => [comment_count] => 0 [filter] => raw // это поля меню, используйте их [db_id] => 6364 [menu_item_parent] => 0 [object_id] => 6364 [object] => custom [type] => custom [type_label] => Произвольная ссылка [title] => Произвольная ссылка 2 [url] => http://example.com/foo [target] => [attr_title] => [description] => [classes] => Array ( [0] => ) [xfn] => ) [1] => WP_Post Object ( ... ) ) */
Список изменений
С версии 3.0.0 | Введена. |