bluelinecombo
9/20/2016 - 1:22 PM

Wordpress submenu from main nav based on parent page String.

Wordpress submenu from main nav based on parent page String.

// =============================================================================
// Submenu
// =============================================================================

/*----------  
USAGE - enter page title for submenu and child pages will be loaded into menu

$args = array(
    'menu'    => 'primary', // menu
    'submenu' => 'Services', // Page title
    'items_wrap' => '%3$s', 
    'container' => ''
);
----------*/


add_filter( 'wp_nav_menu_objects', 'submenu_limit', 10, 2 );

function submenu_limit( $items, $args ) {

    if ( empty( $args->submenu ) ) {
        return $items;
    }

    $ids       = wp_filter_object_list( $items, array( 'title' => $args->submenu ), 'and', 'ID' );
    $parent_id = array_pop( $ids );
    $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;
}