Link to home
Start Free TrialLog in
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.
Avatar of James Rodgers
James Rodgers
Flag of Canada image

have you tried just using post id?

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

ASKER

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

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
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.
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

I found a plugin, the script was not working.