Il wordPress loop, più comunemente conosciuto come loop, è quel codice php che permette la visualizzazione degli articoli su wordpress e rende fluida la gestione dei contenuti. Con il termine loop in ambito informatico si indicano una serie di istruzioni che si ripetono fino a quando la condizione stabilita durante la dichiarazione del ciclo rimane vera, nel momento in cui tale condizione risulta falsa il ciclo si interrompe. Il loop wordpress viene utilizzato durante la creazione dei temi per visualizzare la lista dei post in determinate pagine come per esempio la home page o la pagina di una determinata categoria. Comprendere il wordpress loop ci tornerà utile nella creazione di temi o di template di pagina.
Loop di base
Per creare siti web utilizzando WordPress è necessario conoscere il loop, almeno quello di base. WordPress processa ciascun articolo da visualizzare sulla pagina corrente e lo compone in accordo ai criteri specificati. Qualsiasi codice HTML o PHP presente nel Loop verrà eseguito per ciascun articolo. Iniziamo!
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
/* Codice da eseguire in caso di contenuto trovato */
<?php
endwhile;
else:
?>
/* Codice da eseguire in caso di contenuto non trovato */
<?php endif; ?>
Separiamo il loop usando le parti del template
Nelle prime versioni di WordPress, il loop e il suo output erano nel template file index.php del tema, anche insieme ad altri template file. Oggi non tutti i temi inseriscono l’intero loop nel file index.php. Utilizzando il tag include get_template_part() insieme ad un template file di loop distinto, possiamo separare il loop dai vari template, riutilizzandolo quando necessario. Quindi potremmo vedere temi che avranno alcuni template file che conterranno il loop in sé e che non si affideranno a get_template_part() per l’inclusione nel loop, mentre altri utilizzeranno loop.php ma restituiranno il contenuto in modo diverso a seconda della parte del sito che viene visualizzata. Se separiamo il solo output del loop, quindi il contenuto vero e proprio, invece che sfruttare il loop per intero, ci viene più semplice riutilizzare il codice. In questo modo invece di avere un template loop.php predefinito e poi un template loop-category.php, usando il loop “prendo tutto” e quello per gli archivi delle categorie, possiamo limitarvi a gestire il solo output del contenuto. Quindi in questo modo avremo un template content.php con un codice “prendo tutto” nei casi in cui non c’è un file di output del loop dedicato da includere, e che utilizzeremo content-archive.php per l’archivio delle categorie.
WordPress mostra automaticamente i post dal database all’interno di un template di pagina con un design progettato dal designer. In molte situazioni possiamo avere la necessità di visualizzare informazioni specifiche per un post e al verificarsi di determinati eventi. L’obiettivo di questo articolo è fornire informazioni sul loop di WordPress ma tengo a dare alcune informazioni utili sui vari metodi che possono essere utilizzati per rendere visibile un contenuto (o parte di esso) agli utenti del nostro sito web. In questo esempio abbiamo il custom post type “dipendenti”:
- mostrare la lista degli ultimi dipendenti aggiunti, in un elenco puntato HTML standard;
- creare una galleria con le immagini dei dipendenti;
- creare una lista con i soli dipendenti che hanno un determinato ruolo aziendale.
Come possiamo rendere visibile quanto detto sopra?
- usando funzioni PHP da aggiungere manualmente nel tema;
- realizziamo un widget;
- creando uno shortcode;
- aggiungendo un blocco direttamente nell”editor.
Il Loop di WordPress: Cuore del CMS
Dopo questa premessa parliamo del loop di WordPress! WP_Query è il cuore del loop, si tratta di una classe che gestisce le funzionalità del loop ed è collocata in wp-includes/query.php.
Per mostrare i post, è necessario estrarli dal database; WordPress ha molte funzioni per leggere i post direttamente dal database.
Il loop di base usa l’oggetto predefinito $wp_query, questo vuol dire che quando utilizziamo elementi necessari come have_posts() e the_post(), si impiegano in realtà $wp_query->have_post() e $wp_query->the_post(). Ogni volte che, per esigenze di personalizzazione, usciamo da $wp_query dobbiamo creare un oggetto corrispondente, come questo:
$brand_new_query = new WP_Query();
Il codice restituisce un oggetto che include alcune impostazioni, vediamo un esempio pratico:
$query = new WP_Query ( [
'post_type' => 'dipendenti',
'post_per_page' => 5,
'order' => 'ASC',
'orderby' => 'title'
] );
Il codice sopra riportato non restituisce nessun post ma definisce alcune impostazioni, come il tipo di post, il numero di post da mostrare per pagina e l’ordinamento dei post. Vediamo ora il loop (ovvero ciclo while di PHP) vero e proprio da aggiungere in un template di pagina del nostro tema:
<?php if ( have_posts() : ) ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php endwhile; ?>
<?php endif; ?>
Nel codice vediamo due funzioni primarie: have_posts() e the_post(). Il primo serve per l’IF e come iteratore per il ciclo while. Quest’ultimo imposta i dati del post corrente tramite la variabile globale $post, che è un’istanza di un oggetto WP_Post.