I found this filter online a while ago when I had similar issue. I wanted to display all children pages that were set in Appearances -> menus in the backend of wordpress. I only wanted to show the children of the current page, without using get_children. I would give credit to whoever wrote this beauty, but I can't find the source.
This filter adds an extra option to the function wp_nav_menu. It lets you add the argument submenu. The only flaw is that you need to use the parent title (not ID) to make the selection, but you can get that from the page title.
add_filter( 'wp_nav_menu_objects', 'submenu_limit', 10, 2 );
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;
}
This is how I use it in the sidebar:
<?php
//Get parent title
$menu_title = empty($post->post_parent) ? get_the_title( $post->ID ) : get_the_title( $post->post_parent );
wp_nav_menu(array('menu' => 'main-menu','submenu' => $menu_title));
?>