Il menu di navigazione personalizzato viene creato con pagine predefinite, ma non collegato alla posizione del menu personalizzato del tema
Lo script qui sotto crea un menu di navigazione e vi assegna una pagina. Tutto funziona perfettamente tranne il fatto che il menu di navigazione non viene automaticamente assegnato alla posizione "Header-menu" del mio tema.
Qualche idea sul perché?
//Registra le posizioni dei menu per il tema
add_action( 'init', 'register_my_menus' );
function register_my_menus() {
register_nav_menus(
array('header-menu' => __( 'Menu Intestazione' ), 'footer-menu' => __( 'Menu Piè di Pagina' ))
);
}
//Crea un menu di navigazione, aggiungi una pagina e assegnalo alla posizione "header-menu" del tema.
$menu_id = wp_create_nav_menu( 'header-menu' );
$menu = array(
'menu-item-type' => 'custom',
'menu-item-url' => get_home_url('/'),
'menu-item-title' => 'Home',
'menu-item-status' => 'publish',
'theme_location' => 'header-menu', //Era solo un tentativo ma non ha funzionato!!!
);
wp_update_nav_menu_item( $menu_id, 0, $menu );

La funzione wp_create_nav_menu()
accetta il nome del menu e non la posizione del menu.
Per quanto riguarda wp_update_menu_item()
, questa è per gli elementi del menu e non per il menu stesso.
Dopo aver scavato nel codice ho scoperto che l'"assegnazione" della 'posizione del tema' a un menu non viene effettuata utilizzando l'API nav_menu in WordPress ma con le opzioni del tema, quindi:
//prima ottieni il tema corrente
$theme = get_current_theme();
//ottieni le modifiche del tema
$mods = get_option("mods_$theme");
//aggiorna le modifiche con l'ID del menu nella posizione del tema
$mods['nav_menu_locations']['header-menu'] = $menu_id;
update_option("mods_$theme", $mods);
spero che questo aiuti :)

Sei una rock star. Non mi meraviglio di non averlo trovato. Se avessi un pulsante +20, lo premerei con forza.

il tuo suggerimento mi ha avvicinato molto alla soluzione e lo seleziono come risposta. Tuttavia, non sta ancora assegnando il menu alla posizione del menu. Sto ricevendo alcuni errori di traccia su $menu_id che già esiste. Quindi, lo sto pubblicando come domanda separata.
