Sei qui: Homepage » wordpress » Le funzioni wp_list_pages e wp_page_menu di WordPress
mar 01 2010
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.
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.
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'); ?>
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.
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.
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.
Per cambiare la classe del menu, è sufficiente usare il parametro menu_class:
<?php wp_page_menu('menu_class=navigation'); ?>
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.
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.
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.
Hai trovato interessante questo post? Puoi leggere anche i seguenti articoli:
Classificato in wordpress. Puoi fare un trackback dal tuo sito.
TomStardust.com è realizzato secondo i canoni dell'accessibilità, le normative del W3C, e la legge Stanca, pur non essendo il sito di una pubblica amministrazione e non avendo nessun obbligo a riguardo.
Poter navigare su internet ed accedere alle informazioni sulla rete è un diritto di tutti, realizzare siti che rispondano agli standard web dovrebbe essere un dovere di ogni sviluppatore.
Questo sito e tutti i suoi contenuti, compresi i temi Wordpress, sono pubblicati sotto licenza Creative Commons 2.5.
Questo sito non rappresenta una testata giornalistica e viene aggiornato senza alcuna periodicità.
Powered by Wordpress
molto interessante come cosa, questo fa parte sempre dei miei TODO cioè trovare il tempo di mettermi a studiare seriamente WP
ciao
Interessante soprattutto il link alla Home, non conoscevo il comando.
Conosci per caso qualche modo “semplice” per richiamare all’occorrenza le thumbnail delle pagine nell’elenco?
Io per ora ho risolto modificando il file wp-includes/classes.php con una funzione che ho trovato in giro per la rete, ma è parecchio contorto…
Ciao
Zave
@Zave: forse si può fare qualcosa sfruttando il parametro link_before, aggiunto proprio dalla versione 2.7 di WordPress, che ti permette di inserire del codice prima del link. Devi però provvedere tu a recuperare le immagini che ti interessano e ad inserirle nel menu.
bhe, è comunque interessante, stasera mi documento un po’ =)
comunque non risolve il mio problema, se vuoi ti passo la soluzione che ho trovato che, per quanto macchinosa, è interalmente personalizzabile.
Credo che l’utilità di avere un link per la home separato dal resto delle pagine sta nel poter applicare una classe che prevede a sinistra del link un separatore per le pagine, e senza per la home. Se si usa wp_page_menu questo non è applicabile (forse, è più che altro una questione di gusto) in quanto la classe applicata ai link è la stessa per home e le altre pagine.
Ad ogni modo utilissimo articolo, grande Tom ;)
E’ possibile fare in modo che il codice generato per , ad esempio:
Home
AZIENDA
contenga solo il riferimento al numero di ID e non le parole page_item page-item, ovvero:
Home
AZIENDA
Grazie.
@natspace: non puoi modificare le classi di default assegnate alle voci del menu, sono standard comuni a tutti i temi di WordPress ed è bene che siano sempre presenti. Puoi dare un’occhiata alle pagine ufficiali delle funzioni su wordpress.org per capire quali parametri puoi cambiare.