Avatar of Brad Bansner
Brad Bansner
 asked on

Use wp_nav_menu in WordPress to get submenu list by menu ID number

This code:

$currentmenu=get_the_title($post->ID);
$args=array('menu' => 'Main Navigation', 'submenu' => $currentmenu);
wp_nav_menu($args);

Open in new window


...gets the title of the current page and passes it to the wp_nav_menu function, within the Main Navigation menu, to get that page's submenu.

It works, until there are two pages with the same title. In my site, there are two pages called Services, each located under different parent menus, so the code fails.

How could the above code be modified to work based on the current page's ID number instead of page title? Or is there a better way than that?

Thank you.
WordPress

Avatar of undefined
Last Comment
Brad Bansner

8/22/2022 - Mon
James Rodgers

have you tried just using post id?

$args=array('menu' => 'Main Navigation', 'submenu' => $post->ID);
Brad Bansner

ASKER
I did try that, and it fails. Apparently you can't just pass an ID to 'submenu'.
ASKER CERTIFIED SOLUTION
James Rodgers

THIS SOLUTION ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
GET A PERSONALIZED SOLUTION
Ask your own question & get feedback from real experts
Find out why thousands trust the EE community with their toughest problems.
Brad Bansner

ASKER
Well, that helps actually. I made a mistake... there is some custom PHP involved, as shown at this URL:
http://www.ordinarycoder.com/wordpress-wp_nav_menu-show-a-submenu-only/

I believe that is what I used. Sorry, I build this quite a while ago, and must have forgotten there was some customization involved.
I started with Experts Exchange in 2004 and it's been a mainstay of my professional computing life since. It helped me launch a career as a programmer / Oracle data analyst
William Peck
Brad Bansner

ASKER
So probably in addition to passing the ID, I need to modify some of this:

function submenu_limit($items, $args){
	if (empty($args->submenu)) return $items;
	$parent_id=array_pop(wp_filter_object_list($items, array('title' => $args->submenu), 'and', 'ID'));
	$children=submenu_get_children_ids($parent_id, $items);
	foreach ($items as $key => $item){
		if (!in_array($item->ID, $children)) unset($items[$key]);
	}
	return $items;
}

function submenu_get_children_ids($id, $items){
	$ids=wp_filter_object_list($items, array('menu_item_parent' => $id), 'and', 'ID');
	foreach ($ids as $id){
		$ids=array_merge($ids, submenu_get_children_ids($id, $items));
	}
	return $ids;
}

Open in new window

Brad Bansner

ASKER
I found a plugin, the script was not working.