AVVISO IMPORTANTE: Dato l'elevato numero di richieste, Eternal Curiosity non può accettare nuovi clienti, sia che si tratti di consulenze scritte che di ottimizzazione SEO diretta. Valutiamo solo casi eccezionali e ad alto budget. Per informazioni, vi invitiamo a scriverci a info@eternalcuriosity.it

Questo articolo apparteneva al vecchio blog (blog.danilopetrozzi.it), per cui le informazioni potrebbero non essere più aggiornate ed attendibili.

Pillole di WordPress: ottenere la lista delle sottopagine in PHP

Tra i vari esperimenti che sto portando avanti sul blog, oggi vede la luce anche “Pillole di WordPress”: una rubrica in cui pubblicherò trucchi facili e avanzati per il CMS che tanto adoriamo =)

Difficoltà:

L’obiettivo

Vogliamo generare una semplice lista in PHP che contenga tutte le sottopagine di una determinata pagina di WordPress.

Immaginiamo di avere questa struttura:

  • www.sito.it/colori/
  • www.sito.it/colori/rosso
  • www.sito.it/colori/verde
  • www.sito.it/colori/blu

Se “colori”, “rosso”, “verde” e “blu” sono tutte pagine (non articoli) di WordPress, allora purtroppo non ci sono widget o altre automazioni che ci permettono di ottenere la lista di tutte le sottopagine di “colori”.

La soluzione

Per risolvere il problema, facciamo uso della funzione WP_Query() che permette di interrogare il database passandogli una serie di parametri per definire la ricerca.

Se la pagina “colori” avesse come ID = 25, allora questo sarebbe il codice:

L’output dell’intero script, sarebbe:

Spiegazione

Per prima cosa, dobbiamo popolare l’array $args inserendo i valori che intendiamo utilizzare per eseguire la query. In questo caso semplicissimo, abbiamo usato:

‘post_type’ => ‘page’,
‘post_parent’ => 25,
‘post_status’ => ‘publish’,

Con questi parametri, comunichiamo a WordPress la nostra intenzione di ottenere solo le pagine (cone il post_type), solo quelle “figlie” della pagina “colori” (con il post_parent) e solo quelle con lo status “pubblicato” (altrimenti verrebbero prese anche le pagine in Bozza)

La query viene effettivamente lanciata con il comando $query = new WP_Query( $args );

Con l’istruzione successiva   if ( $query->have_posts() ) {   controlliamo che la query abbia generato dei risultati. Se il controllo è positivo, allora stampiamo l’apertura di una lista con  echo ‘<ul>’;

Successivamente attiviamo un loop:

while ( $query->have_posts() ) {
$query->the_post();

Questo loop significa: finché ci sono risultati della query, analizzane uno per uno.

Nel blocco successivo, è possibile inserire qualsiasi operazione che debba essere svolta con ciascun post. Per ragioni di praticità noi ci limitiamo a inserire il titolo linkato della pagina, all’interno di un <li></li>, e quindi:

echo ‘<li><a href=”‘ .get_permalink().'”>’ . get_the_title() . ‘</a></li>’;

Successivamente chiudiamo i due costrutti e ci ricordiamo di inserire la chiusura della lista con echo ‘</ul>’;

Prima di chiudere il nostro codice PHP è sempre bene lanciare la funzione  wp_reset_postdata();  che serve a pulire il contenuto della variabile globale $post (è un controllo di sicurezza).

Variante

Quello che abbiamo visto prima è il codice base, ma spesso c’è bisogno di maggiori funzionalità, come ad esempio ordinare le pagine per un determinato parametro, aumentare il numero di pagine in output e così via.

Di seguito trovate il codice “maggiorato” con altri parametri utili

Le novità apportate sono le seguenti:

  • per rendere lo script universale, ho aggiunto la riga 2 e ho modificato la 6. Il fatto di caricare la variabile $post tramite  global $post;  mi permette successivamente di usare $post->ID  alla riga 6 (prima avevamo inserito un ID fisso, il 25). Così facendo, questo script può essere copiato e incollato ovunque e produrrà la lista relativa alla pagina in cui si trova.  (se copio questo script nella pagina /libri/ otterrò la lista delle sottopagine di /libri/)
  • alle righe 8-9 abbiamo aggiunto i parametri orderby e order, per dire a WordPress di ordinare la lista in ordine alfabetico crescente
  • alla riga 10 diciamo a WordPress che non deve limitare il numero massimo di righe, ma che deve fornirci fino a 9999 sottopagine

 

Danilo petrozzi

Ciao! Io sono Danilo Petrozzi, il fondatore di Eternal Curiosity. Oltre a essere un senior SEO Specialist e un Web Developer, è dall'età di 9 anni che mi appassiono a qualsiasi cosa ruoti intorno al web e all'informatica in generale.

Lascia un commento