Un confronto tra le due soluzioni disponibili per creare un menu di navigazione.
Su WordPress esistono due funzioni php essenziali per la gestione dei menu di navigazione: wp_list_pages e wp_page_menu. Che abbiate un semplice blog o un sito più complesso, in ogni caso avrete quasi sempre bisogno di un menu di navigazione, anche solo per includere i link alla homepage, alla pagina about ed a quella dei contatti.
Le due funzioni hanno alcune differenze: wp_page_menu è stata introdotta dalla versione 2.7 e va ad estendere wp_list_pages, che comunque fa ancora egregiamente il suo dovere. Recentemente mi sono imbattuto in queste funzioni per un aggiornamento al tema Stardust, ed ho deciso di condividere quello che ho scoperto.
La funzione wp_list_pages
Se lavorate con WordPress, conoscerete bene questo template tag, esistente ormai da anni:
<?php wp_list_pages(); ?>
Il suo punto di forza sono le possibilità di personalizzazione.
Escludere una pagina dal menu
Una delle opzioni più usate è quella che consente di nascondere dal menu alcune pagine. Per farlo è sufficiente usare il parametro exclude (in questo caso elimina dall’elenco le pagine con ID 1 e 7:
<?php wp_list_pages('exclude=1,7'); ?>
Mostrare solo le pagine di primo livello
Un altro parametro molto utile è depth, che permette di nascondere tutte le sottopagine e controllare la profondità del menu:
<?php wp_list_pages('depth=1'); ?>
In questo caso, depth=1 mostra solo le pagine di primo livello.
Nascondere il titolo
Se invece non avete bisogno del titolo prima dell’elenco delle pagine, ad esempio perché il menu non è nella sidebar ma disposto in orizzontale, potete usare il parametro title_li:
<?php wp_list_pages('title_li='); ?>
La funzione wp_list_pages offre ottime possibilità di personalizzazione, e spesso è più che sufficiente. Per tutti i dettagli vi consiglio di consultare anche la pagina ufficiale su WordPress.org, dove sono illustrati i parametri utilizzabili ed i rispettivi valori.
La funzione wp_page_menu
Dalla versione 2.7 di WordPress è stato introdotta la funzione wp_page_menu, che aumenta le possibilità a disposizione degli sviluppatori. La differenza principale con wp_list_pages è nel codice che viene generato, e nella possibilità di mostrare un link alla homepage.
Usando la funzione
<?php wp_page_menu(); ?>
Questo sarà l’HTML creato:
<div class=”menu”>
<ul>
<li class=”current_page_item”><a href=”…” title=”…”>Pagina attiva</a></li>
<li class=”page_item”><a href=”…” title=”…”>Pagina</a></li>
…
</ul>
</div>
Non c’è quindi bisogno di aggiungere codice HTML intorno alla funzione php, tutto il necessario viene generato automaticamente.
Cambiare la classe associata al menu
Per cambiare la classe del menu, è sufficiente usare il parametro menu_class:
<?php wp_page_menu('menu_class=navigation'); ?>
Mostrare un link alla home nel menu
La novità principale però riguarda il parametro per includere automaticamente un link alla homepage:
<?php wp_page_menu('show_home=1'); ?>
Utilizzando wp_list_pages questo era possibile solo inserendo manualmente nel template un link alla home, ma è una soluzione poco elegante. Inoltre possono esserci problemi quando la prima pagina del blog è una pagina statica: il link alla homepage apparirebbe duplicato.
Con wp_page_menu questo non accade: con un parametro è possibile gestire tutto senza problemi.
Altri parametri
Una caratteristica non è specificata sulla documentazione ufficiale, ma è fondamentale: la funzione wp_page_menu supporta tutti i parametri di wp_list_pages, essendo un’estensione di quest’ultima.
Se ad esempio volete creare un menu con classe “nav”, mostrando anche la homepage e solo un livello di profondità, questa è la funzione:
<?php wp_page_menu('menu_class=nav&show_home=1&depth=1'); ?>
Potete approfondire il discorso sulla pagina di wordpress.org dedicata alla funzione, ricordandovi quindi anche di wp_list_pages.
Quale funzione utilizzare?
La presenza di due funzioni simili potrebbe confondere le idee, ed in effetti viene da chiedersi quale sia l’utilità del conservarle entrambe. La risposta è da cercare nella retrocompatibilità per le vecchie versioni di WordPress.
Se però dovete sviluppare un nuovo tema e non avete problemi di questo tipo, il mio consiglio è di sfruttare fin da subito wp_page_menu. I vantaggi non sono incredibili ma ci sono: i vostri visitatori non noteranno niente di diverso, ma voi avrete un codice più facile da mantenere.