Obtener objeto de menú desde theme_location

25 sept 2011, 21:42:21
Vistas: 24.6K
Votos: 10

Me gustaría obtener un objeto de menú desde su argumento theme_location.

Mi objetivo es mostrar por separado el nombre del menú y los nombres de sus elementos, URL y descripción.

Ejemplo de lo que estoy buscando:

$menu = get_menu('nav-menu'); //obtener menú desde su theme_location
echo $menu->name; //muestra el nombre del menú
foreach($menu->items as $item){
    echo '<a href="'.$item->link'">'.$item->name.'</a>'; //muestra un enlace al destino del elemento
    echo $item->description; //muestra la descripción del elemento
}
0
Todas las respuestas a la pregunta 3
0
16

Este método parece ser lo que estás buscando, utilizando get_nav_menu_locations() y get_term():

$theme_locations = get_nav_menu_locations();

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

$menu_name = $menu_obj->name;

(Consulta el enlace para ver todo el código envuelto en una función personalizada; el código anterior solo resalta las funciones relevantes de WordPress para obtener lo que necesitas).

25 sept 2011 22:02:28
0

O si lo necesitas en una sola línea, simplemente copia esto y reemplaza "change-this-location-slug" por el tuyo propio.

$string = get_term(get_nav_menu_locations()['change-this-location-slug'], 'nav_menu')->name;
24 sept 2016 19:35:58
0

A partir de WordPress 3.0.0 puedes usar la función wp_get_nav_menu_object para recuperar el objeto WP_Term correspondiente y así obtener su nombre.

Para obtener el ID del menú que se pasa a wp_get_nav_menu_object, puedes usar get_nav_menu_locations.

Ampliando tu ejemplo:

$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; // Muestra el nombre del menú.
foreach($items as $item){
    echo '<a href="'. esc_url( $item->url )'">'. esc_html( $item->title ).'</a>'; // Muestra un enlace al destino del elemento.
    echo $item->description; // Muestra la descripción del elemento.
}
15 ago 2022 18:17:11