Получение объекта меню из theme_location

25 сент. 2011 г., 21:42:21
Просмотры: 24.6K
Голосов: 10

Я хочу получить объект меню используя его аргумент theme_location.

Моя цель - отдельно вывести название меню, а также названия его элементов, URL и описания.

Пример того, что я ищу:

$menu = get_menu('nav-menu'); // получаем меню по его расположению в теме
echo $menu->name; // выводит название меню
foreach($menu->items as $item){
    echo '<a href="'.$item->link'">'.$item->name.'</a>'; // выводит ссылку на целевую страницу элемента
    echo $item->description; // выводит описание элемента
}
0
Все ответы на вопрос 3
0
16

Этот метод, похоже, то, что вам нужно, используя get_nav_menu_locations() и get_term():

$theme_locations = get_nav_menu_locations();

$menu_obj = get_term( $theme_locations[$theme_location], 'nav_menu' );

$menu_name = $menu_obj->name;

(Смотрите ссылку для полной реализации в виде пользовательской функции; приведенный выше код просто выделяет соответствующие функции WordPress для получения нужного вам результата.)

25 сент. 2011 г. 22:02:28
0

Или, если вам нужен однострочный вариант, просто скопируйте этот код и замените "change-this-location-slug" на свой собственный.

$string = get_term(get_nav_menu_locations()['change-this-location-slug'], 'nav_menu')->name;
24 сент. 2016 г. 19:35:58
0

Начиная с WordPress 3.0.0 вы можете использовать функцию wp_get_nav_menu_object для получения соответствующего объекта WP_Term, чтобы извлечь его название.

Получение ID меню для передачи в wp_get_nav_menu_object может быть выполнено с помощью функции get_nav_menu_locations.

Расширяя ваш пример:

$menu_id = get_nav_menu_locations()[ 'nav-menu' ];
$menu = wp_get_nav_menu_object( $menu_id );
$items = wp_get_nav_menu_items( $menu_id );
 
echo $menu->name; // Выводит название меню.
foreach($items as $item){
    echo '<a href="'. esc_url( $item->url )'">'. esc_html( $item->title ).'</a>'; // Выводит ссылку на пункт меню.
    echo $item->description; // Выводит описание пункта меню.
}
15 авг. 2022 г. 18:17:11