Il menu di navigazione personalizzato viene creato con pagine predefinite, ma non collegato alla posizione del menu personalizzato del tema

7 apr 2011, 00:06:56
Visualizzazioni: 1.65K
Voti: 0

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 );
0
Tutte le risposte alla domanda 1
2

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 :)

7 apr 2011 02:48:25
Commenti

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

Scott B Scott B
7 apr 2011 03:56:00

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.

Scott B Scott B
7 apr 2011 19:05:35