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

Brad Bansner
Brad Bansner used Ask the Experts™
on
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.
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
James RodgersWeb Applications Developer

Commented:
have you tried just using post id?

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

Author

Commented:
I did try that, and it fails. Apparently you can't just pass an ID to 'submenu'.
Web Applications Developer
Commented:
I looked online and i don't see the 'submenu' option in the codex
Microsoft Azure 2017

Azure has a changed a lot since it was originally introduce by adding new services and features. Do you know everything you need to about Azure? This course will teach you about the Azure App Service, monitoring and application insights, DevOps, and Team Services.

Brad BansnerWeb Developer

Author

Commented:
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.
Brad BansnerWeb Developer

Author

Commented:
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 BansnerWeb Developer

Author

Commented:
I found a plugin, the script was not working.

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial