I'd like to get a menu object from its theme location argument.

My goal is to output separately the menu name and its items name, url and description.

Example of what I'm looking for :

$menu = get_menu('nav-menu'); //get menu from its theme location
echo $menu->name; //displays the menu name
foreach($menu->items as $item){
    echo '<a href="'.$item->link'">'.$item->name.'</a>'; //displays a link to the item destination
    echo $item->description; //displays the item description

This method looks like what you're looking for, using get_nav_menu_locations() and get_term():

$theme_locations = get_nav_menu_locations();

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

$menu_name = $menu_obj->name;

(See the link for the whole thing wrapped up in a custom function; the above code just highlights the relevant WP functions for getting what you're after.)


Or if you need it in one line, just copy that and replace "change-this-location-slug" by our own.

$string = get_term(get_nav_menu_locations()['change-this-location-slug'], 'nav_menu')->name;

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.