Функция wp_get_nav_menus()
возвращает массив объектов навигационных меню, которые зарегистрированы и сохранены в базе данных WordPress. Это удобный инструмент для работы со всеми меню сайта и их обработкой.
wp_get_nav_menus( array $args = array() ): WP_Term[]
Параметры:
- $args (array, необязательный) — Массив аргументов для фильтрации меню, который передаётся в функцию
get_terms()
. По умолчанию используетсяarray( 'hide_empty' => false, 'orderby' => 'name' )
.
Возвращаемое значение:
Функция возвращает массив объектов WP_Term
, представляющих меню, зарегистрированные в системе.
Пример 1: Получение всех меню
Самый простой и часто используемый сценарий — это получение всех меню, зарегистрированных на сайте.
// Получаем все навигационные меню
$menus = wp_get_nav_menus();
// Выводим информацию о каждом меню
foreach ( $menus as $menu ) {
echo 'ID меню: ' . esc_html( $menu->term_id ) . '<br>';
echo 'Название меню: ' . esc_html( $menu->name ) . '<br>';
echo 'Слаг меню: ' . esc_html( $menu->slug ) . '<br><br>';
}
Этот код выводит ID, название и слаг каждого зарегистрированного меню на сайте.
Пример 2: Фильтрация меню с помощью аргументов
Вы можете передать дополнительные аргументы для фильтрации возвращаемых меню. Например, можно получить только те меню, которые не пусты.
// Получение только непустых меню
$args = array( 'hide_empty' => true );
$menus = wp_get_nav_menus( $args );
// Выводим данные о непустых меню
foreach ( $menus as $menu ) {
echo 'Непустое меню: ' . esc_html( $menu->name ) . '<br>';
}
В этом примере мы выводим только те меню, которые содержат пункты.
Пример 3: Получение меню по алфавиту
Аргумент orderby
позволяет сортировать меню по имени. Следующий пример демонстрирует, как получить все меню, отсортированные по алфавиту.
// Получаем меню, отсортированные по имени
$args = array( 'orderby' => 'name' );
$menus = wp_get_nav_menus( $args );
// Выводим меню в алфавитном порядке
foreach ( $menus as $menu ) {
echo 'Меню (по алфавиту): ' . esc_html( $menu->name ) . '<br>';
}
Пример 4: Получение и вывод количества пунктов меню
В этом примере мы получаем все меню и выводим количество пунктов в каждом из них.
// Получаем все меню
$menus = wp_get_nav_menus();
// Выводим количество пунктов в каждом меню
foreach ( $menus as $menu ) {
echo 'Меню: ' . esc_html( $menu->name ) . ' имеет ' . esc_html( $menu->count ) . ' пунктов.<br>';
}
Этот код полезен для отображения статистики меню, например, для вывода информации о размере каждого меню.
Пример 5: Работа с несколькими меню на сайте
Если на сайте несколько меню для разных областей (например, для хедера, футера, сайдбара и т.д.), можно получить все меню и динамически вывести их.
// Получаем все меню сайта
$menus = wp_get_nav_menus();
// Выводим информацию о каждом меню
foreach ( $menus as $menu ) {
echo '<h3>Меню: ' . esc_html( $menu->name ) . '</h3>';
echo 'ID: ' . esc_html( $menu->term_id ) . '<br>';
echo 'Слаг: ' . esc_html( $menu->slug ) . '<br>';
}
Этот код может быть полезен, если вы хотите динамически выводить данные о всех доступных меню в разных местах сайта.
Пример 6: Получение меню по определённым условиям
Если необходимо получить только меню, которые соответствуют определённым условиям, можно передать дополнительные аргументы в функцию.
// Получаем меню, содержащие определённое количество элементов
$args = array( 'number' => 2 ); // Получим только два меню
$menus = wp_get_nav_menus( $args );
// Выводим два найденных меню
foreach ( $menus as $menu ) {
echo 'Меню: ' . esc_html( $menu->name ) . '<br>';
}
Этот код ограничивает количество получаемых меню до двух, что может быть полезно для оптимизации вывода на странице.
Сравнение с другими функциями для работы с меню
Для работы с навигационными меню в WordPress существует несколько функций. Вот краткое сравнение:
wp_get_nav_menus()
— Возвращает массив объектов меню, зарегистрированных в системе.get_registered_nav_menus()
— Возвращает список зарегистрированных мест для меню, но без информации о самих меню.get_nav_menu_locations()
— Возвращает массив, в котором указано, какие меню привязаны к конкретным областям темы.
Пример использования всех функций:
// Получаем зарегистрированные места для меню
$registered_menus = get_registered_nav_menus();
print_r( $registered_menus ); // Массив зарегистрированных мест
// Получаем привязанные меню к местам темы
$menu_locations = get_nav_menu_locations();
print_r( $menu_locations ); // Массив с ID меню, привязанных к местам темы
// Получаем сами меню
$menus = wp_get_nav_menus();
print_r( $menus ); // Массив объектов меню
Заключение
Функция wp_get_nav_menus()
является важным инструментом для работы с навигационными меню в WordPress. Она позволяет гибко управлять всеми меню на сайте, получая подробную информацию о каждом из них. С помощью этой функции можно динамически выводить данные о меню, фильтровать их по различным параметрам и интегрировать в любую часть темы.