Un menu per tutti i sottodomini di WordPress MS

Recentemente in quest’articolo: Creare e gestire uno o più menu per i sottodomini su wordpress 3.0 avevo parlato come far visualizzare un solo menu per tutti i sottodomini di wordpress ms o mu.
Stamattina effettuando delle prove sulla mia network di prova, ho notato che purtroppo c’era un conflitto banale niente di grave. Nella mia sidebar di destra avevo dei widgets attivi come tag, articoli recenti, archivio per mese ma non mostrava nulla andado a risalire il problema mi mostrava tutto del blog principale ossia con id 1 quello che ho sfruttato per creare il menu unico per tutta la mia rete. Infatti in un sottoblog con id 2 avevo una marea di articoli e una marea di tag che non venivano mostrati. Il problema era che questo codice richiamava solo il blog con id 1, data da questa funzione: $wpdb->set_blog_id(1);

// Semplice funzione per richiamare il menu dal blog principale
function sd_nav_menu() {
global $wpdb;

// Richiamiamo le tabelle sql del blog numero 1 da dove ricavare il nostro menu
$wpdb->set_blog_id(1);

// solita funzione wp_nav_menu(); associata a una variabile
$menu = wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'primary', 'menu' => '3' ) );
return $menu;
}

Ho dovuto rieffettuare delle prove, dove questa volta non ho riscontrato problemi.
Se ne trovate voi qualcuno siate gentili da comunicarlo in modo da trovare un’alternativa.
Ho riscritto parte del codice:

// Semplice funzione per richiamare il menu dal blog principale
function sd_nav_menu() {
	global $wpdb;

	// Richiamiamo le tabelle sql del blog numero 1 da dove ricavare il nostro menu
	$this_blog=$wpdb->set_blog_id(1);

	// solita funzione wp_nav_menu(); associata a una variabile
	$menu = wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'primary', 'menu' => '3' ) );

	// Resetto le tabelle sql del blog attuale in modo da non trovare conflitti.
	$wpdb->set_blog_id($this_blog);
	return $menu;
}

Volevo precisare che nella funzione wp_nav_menu(); c’è questo ‘menu’ => ‘3’ quel 3 idica l’identificato del mio menu, voi per correttezza al posto di quel numero potete inserire il nome del menu di come l’avete creato, in tal caso inserito l’identificativo vostro.

Spero che non ci siano più problemi in futuro.

3 pensieri riguardo “Un menu per tutti i sottodomini di WordPress MS”

  1. Sto provando wpmu e lo script che stai creando mi sembra molto interessante però non mi cambia nulla, o meglio i menu sono sempre indipendenti blog da blog? qualche idea? devo fare qualcosa di particolare? un saluto e buon lavoro

    1. Ciao Massimo,
      è molto semplice la prima cosa da fare è che a un determinato blog devi creare il menu che ritieni che sarà quello generale per tutti i sottodomini o che sia parziale, a te la scelta. Il mio script è solo un punto di partenza.
      La cosa importante è capire l’id del blog altrimenti non riesci mai a prenderlo, la seconda cosa da fare è copiare e incollare questo codice in function.php dei temi dove vuoi che compaia: // Semplice funzione per richiamare il menu dal blog principale
      function sd_nav_menu() {
      global $wpdb;

      // Richiamiamo le tabelle sql del blog numero 1 da dove ricavare il nostro menu
      $this_blog=$wpdb->set_blog_id(1);

      // solita funzione wp_nav_menu(); associata a una variabile
      $menu = wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'primary', 'menu' => '3' ) );

      // Resetto le tabelle sql del blog attuale in modo da non trovare conflitti.
      $wpdb->set_blog_id($this_blog);
      return $menu;
      }
      dove $wpdb->set_blog_id(1); il numero 1 è l’id del blog che tu l’hai creato e di conseguenza lo vai a sostituire.
      Sempre nei temi dove vuoi che compaia il menu generale devi aprire header.php e incollare sd_nav_menu() dove vuoi che compaia o lo vai a sostituire a wp_nav_menu();

      Se ci sono problemi rimango a completa disposzione.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *