pannello di controllo




Sei qui: Homepage » wordpress » Le funzioni wp_list_pages e wp_page_menu di WordPress

mar 01 2010

10

Le funzioni wp_list_pages e wp_page_menu di WordPress

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.

Usi Twitter?

Twitter

Ti è piaciuto questo post?

Segnalalo su Twitter, aiutami a spargere la voce!

 

10 Commenti a “ Le funzioni wp_list_pages e wp_page_menu di WordPress ”

  1. molto interessante come cosa, questo fa parte sempre dei miei TODO cioè trovare il tempo di mettermi a studiare seriamente WP

    ciao

  2. 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

  3. @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.

  4. 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.

  5. 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 ;)

  6. 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.

  7. @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.

Scrivi un commento


Menu secondario

feed

classifica commentatori

categorie

archivio

extra

TomStardust Diary - Il blog personale di Tommaso Baldovino

Twitter

Metafora AD Network