Функция wp_get_nav_menu_object()
в WordPress используется для получения объекта меню на основе его ID, имени, слага или самого объекта. Она возвращает объект типа WP_Term
, который представляет таксономический элемент, так как меню в WordPress хранятся как элементы таксономии nav_menu
.
wp_get_nav_menu_object( int|string|WP_Term $menu ): WP_Term|false
Параметры:
- $menu (int|string|WP_Term, обязательный) — ID, слаг, имя меню или сам объект меню.
Возвращаемое значение:
Функция возвращает объект WP_Term
, если меню найдено, и false
— если меню не существует или параметр $menu
не передан.
Пример 1: Получение объекта меню по названию
В этом примере мы получаем объект меню по его имени.
// Получение объекта меню по названию
$menu = wp_get_nav_menu_object( 'custom_main_menu' );
// Проверяем, удалось ли получить меню
if ( $menu ) {
echo 'Название меню: ' . esc_html( $menu->name );
} else {
echo 'Меню не найдено.';
}
Этот код выводит название меню, если меню с указанным именем существует.
Пример 2: Получение объекта меню по слагу
Слаг меню часто используется в URL и является уникальным идентификатором. Следующий пример показывает, как получить объект меню по его слагу.
// Получение объекта меню по слагу
$menu = wp_get_nav_menu_object( 'custom-footer-menu' );
// Проверяем и выводим данные меню
if ( $menu ) {
echo 'Slug меню: ' . esc_html( $menu->slug );
} else {
echo 'Меню с таким слагом не существует.';
}
Пример 3: Получение объекта меню по ID
Иногда удобнее работать с ID меню. Следующий пример демонстрирует, как получить объект меню по его ID.
// Предположим, у нас есть имя меню, и мы хотим получить его ID
$menu_name = 'sidebar_menu';
$menu_obj = get_term_by( 'name', $menu_name, 'nav_menu' );
if ( $menu_obj ) {
$menu_id = $menu_obj->term_id;
$menu = wp_get_nav_menu_object( $menu_id );
// Проверка и вывод данных меню
if ( $menu ) {
echo 'ID меню: ' . esc_html( $menu->term_id );
}
}
Здесь мы сначала получаем ID меню на основе его имени, а затем используем этот ID для получения полного объекта меню.
Пример 4: Получение объекта меню по расположению
WordPress позволяет регистрировать области меню с помощью функции register_nav_menu()
. Следующий пример демонстрирует, как получить объект меню на основе зарегистрированного расположения меню.
// Получение объекта меню на основе расположения
$locations = get_nav_menu_locations();
$menu_id = isset( $locations['header_menu'] ) ? $locations['header_menu'] : false;
if ( $menu_id ) {
$menu = wp_get_nav_menu_object( $menu_id );
if ( $menu ) {
echo 'Название меню: ' . esc_html( $menu->name );
} else {
echo 'Меню не найдено для указанного расположения.';
}
}
Этот код ищет меню, привязанное к области с идентификатором header_menu
, и выводит его название.
Пример 5: Работа с несколькими меню
Если на сайте несколько областей меню, можно получить объекты всех меню и вывести информацию о каждом из них.
// Массив областей меню
$menu_locations = array( 'header', 'footer', 'sidebar' );
foreach ( $menu_locations as $location ) {
$locations = get_nav_menu_locations();
if ( isset( $locations[$location] ) ) {
$menu = wp_get_nav_menu_object( $locations[$location] );
if ( $menu ) {
echo '<h3>Меню для ' . esc_html( $location ) . ':</h3>';
echo 'Название: ' . esc_html( $menu->name ) . '<br>';
echo 'Слаг: ' . esc_html( $menu->slug ) . '<br>';
}
} else {
echo 'Меню для ' . esc_html( $location ) . ' не найдено.<br>';
}
}
Пример 6: Получение всех данных меню
Для более сложных задач может потребоваться вывод всех данных, связанных с меню. Следующий пример выводит все данные объекта меню, используя print_r()
.
// Получение объекта меню по ID
$menu_id = 123;
$menu = wp_get_nav_menu_object( $menu_id );
if ( $menu ) {
echo '<pre>';
print_r( $menu );
echo '</pre>';
} else {
echo 'Меню не найдено.';
}
Этот код выводит полную информацию о меню в удобочитаемом формате.
Заключение
Функция wp_get_nav_menu_object()
— это инструмент для получения объекта меню в WordPress. Она позволяет работать с меню на основе различных параметров: ID, слага, имени или даже самого объекта меню. Функция полезна для динамической работы с навигационными элементами на сайте и может применяться в различных сценариях, как было продемонстрировано в примерах.