Obtener objeto de menú desde theme_location
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
}
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).

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.
}
