Although this does not directly answer the question, the code on which it is based provides the functionality. The code set is:
function install_menus() {
require_once dirname( __FILE__) . '/data.php';
$menus = get_menus_data();
if ( ! empty ( $menus ) ) foreach ( $menus as $menu ) {
if ( $menu['build'] ) {
$menu_id = create_nav_menu( $menu );
add_items_to_menu( $menu_id, $menu['slug'], $menu['items'] );
}
}
}
function create_nav_menu( $menu ) {
if ( $exists = wp_get_nav_menu_object( $menu['name'] ) ) {
$menu_id = $exists -> term_id;
if ( empty ( $menu_id ) ) {
$menu_id = wp_create_nav_menu( $menu['name'] );
}
}
else {
$menu_id = wp_create_nav_menu( $menu['name'] );
}
return $menu_id;
}
function add_items_to_menu( $menu_id, $slug, $items ) {
if ( $items ) foreach ( $items as $item ) {
if ( $item['build'] ) {
$slug = ( $item['title'] == 'Home' ) ? 'home' : $item['slug'];
if ( ! menu_item_exists( $slug, $menu_id ) ) {
wp_update_nav_menu_item( $menu_id, 0, array (
'menu-item-title' => __( $item['title'] ),
'menu-item-classes' => '',
'menu-item-url' => home_url( $item['slug'] . "https://wordpress.stackexchange.com/" ),
'menu-item-status' => 'publish'
) );
}
}
}
}
function menu_item_exists( $slug, $menu_id ) {
$args = array(
'order' => 'ASC',
'orderby' => 'menu_order',
'post_type' => 'nav_menu_item',
'post_status' => 'publish',
'output' => ARRAY_A,
'output_key' => 'menu_order',
'nopaging' => true,
'update_post_term_cache' => false );
$existing = wp_get_nav_menu_items( $menu_id, $args );
$found = false;
foreach ( $existing as $exists ) {
if( strpos( $exists->post_name, $slug ) !== FALSE ) { //pretty good search (not exact).
$found = true;
break;
}
}
return $found;
}
and the data file is:
function get_menus_data() {
$items = array (
array (
'name' => 'Main Menu', 'slug' => 'main-menu', 'build' => 1,
'items' => array (
array ( 'title' => 'Home', 'slug' => '', 'build' => 1 ), //slug should be empty
array ( 'title' => 'Blog', 'slug' => 'blog', 'build' => 1 ),
array ( 'title' => 'About', 'slug' => 'about', 'build' => 1 ),
array ( 'title' => 'Contact', 'slug' => 'contact', 'build' => 1 ),
),
),
array (
'name' => 'Secondary Menu', 'slug' => 'secondary-menu', 'build' => 0,
'items' => array (
array ( 'title' => 'Home', 'slug' => '', 'build' => 1 ),
array ( 'title' => 'Blog', 'slug' => 'blog', 'build' => 1 ),
array ( 'title' => 'About', 'slug' => 'about', 'build' => 1 ),
array ( 'title' => 'Contact', 'slug' => 'contact', 'build' => 1 ),
),
),
array (
'name' => 'Footer Menu', 'slug' => 'footer-menu', 'build' => 1,
'items' => array (
array ( 'title' => 'Terms', 'slug' => 'terms', 'build' => 1 ),
array ( 'title' => 'Privacy', 'slug' => 'privacy', 'build' => 1 ),
array ( 'title' => 'Contact', 'slug' => 'contact', 'build' => 1 ),
),
)
);
return $items;
}
An interface would need to be built on top of this to allow for the selection that is asked, but this code is working and tested.