La "cosa" che molti utilizzatori WordPress non comprendono, sia che essi siano semplici utilizzatori, oppure sviluppatori PHP con più esperienza è un concetto molto importante sul quale WordPress basa tutte le sue funzionalità: il LOOP di WordPress.
Non è un semplice loop di programmazione, il ciclo for...next per intenderci ma è il codice utilizzato per visualizzare i contenuti principali e gli estratti di contenuti sui siti WordPress.
Il Loop rappresenta una delle parti più importanti del sistema WordPress e ci permette di personalizzare la visualizzazione dei nostri articoli e pagine all’interno dei nostri temi, nonchè viene usato anche per visualizzare post personalizzati e campi personalizzati.

Come funziona il WordPress Loop

Il WordPress Loop è un ciclo di interrogazione del database ed è in grado di presentare e/o modificare le informazioni ed i dati contenuti in esso.
Il WordPress Loop inizia con il codice che controlla se la pagina corrente debba visualizzare un elenco di più post o un singolo post o pagina. Se la pagina dovesse elencare i post del blog, elencherà un titolo e un estratto (excerpt) per ogni post, è può tranquillamente essere personalizzato per visualizzare immagini in primo piano o altri contenuti. Se la pagina invece fosse una singola pagina o un singolo post, il loop visualizzerà solo il contenuto di quella pagina.

Se non esistono post disponibili o qualcuno accede a una pagina che non esiste, il loop ha un'opzione per visualizzare un messaggio personalizzato che informa il visitatore che non ci sono post o la pagina non esiste (simile a quello che fa una pagina 404 tranne che personalizzata per specifici tipi di contenuto).

Grazie ai templates, il WordPress Loop può essere personalizzato praticamente per ogni pagina o tipo di contenuto del tuo sito.
Esistono anche modi in cui è possibile utilizzare più loop su una stessa pagina per visualizzare diversi tipi di contenuto oppure formattare il contenuto in modi diversi. Ad esempio, è possibile avere l'ultimo post del blog con un'immagine in primo piano visualizzata più grande nella parte superiore del sito e di seguito avere i post più vecchi elencati di seguito con solo un titolo e un estratto.

WordPress Loop in pratica

Vediamo un semplice esempio di WordPress Loop per visualizzare un elenco di post del blog:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

	<h2><?php the_title() ;?></h2>
	<?php the_post_thumbnail(); ?>
	<?php the_excerpt(); ?>

<?php endwhile; else: ?>

	<p>Spiacenti, non abbiamo trovato posts da elencare.</p>

<?php endif; ?>

Andiamo ad analizzare riga per riga per capire al meglio il suo funzionamento:

Se si usa il WordPress Loop per visualizzare una pagina o un singolo post invece di elencarne più di uno, è interessante notare che non cambia di molto:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

	<h1><?php the_title() ;?></h1>	
	<?php the_content(); ?>

<?php endwhile; else: ?>

	<p>Spiacenti, la pagina non esiste.</p>

<?php endif; ?>

Notiamo che l'unica cosa che è veramente cambiata è l'introduzione della funzione the_content() che serve per visualizzare l'intero contenuto della pagina o singolo articolo.
In pratica la differenza la fa l'istruzione while (have_posts ()): the_post () che a seconda del template in cui viene utilizzato il WordPress Loop e della pagina a cui si accede, determinerà quante volte ripetere il codice.

Cosa può visualizzare il WordPress Loop

Ci sono una serie di elementi che il WordPress Loop può visualizzare, come ad esempio il titolo, un estratto o il contenuto principale. Vediamo un elenco di queste funzioni comuni insieme a una breve descrizione e un collegamento a ulteriori informazioni su ciascuna funzione.

Il loop può anche utilizzare delle istruzioni condizionali per visualizzare contenuto diverso in base a una serie di fattori.

Puoi trovare un elenco completo di tutti i tag condizionali di WordPress sul codex WordPress

Esempio di WordPress Loop avanzato

Ecco un esempio di un WordPress Loop un po' più complesso utilizzando delle funzioni ed istruzioni condizionali sopra descritte:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<article id="post-<?php the_ID(); ?>" <?php if(is_category('featured')): ?>class="featured-post"<?php endif; ?>>
	<h1><?php the_title() ;?></h1>		

	<p>
		Pubblicato il <?php the_time('M j, Y'); ?> 
	        da <?php the_category(', '); ?>
		in <?php the_category(', '); ?>
	</p>

	<?php the_content(); ?>

	<?php comment_form(); ?>

	<div class="prev-next-links">
		<ul>
			<li><?php next_post_link(); ?></li>
			<li><?php previous_post_link(); ?></li>
		</ul>

	</div>

</article>

<?php endwhile; else: ?>

	<p>Spiacenti, questo articolo non esiste.</p>

<?php endif; ?>

WordPress Loop multipli

In alcune situazioni potrebbe essere necessario utilizzare più WordPress Loop su una pagina. Per farlo è probabile che dovrai usare la funzione rewind_posts () prima e magari usarla una seconda, terza o quarta volta (puoi fare tutti i WordPress Loop che vuoi su una pagina, ma attenzione ogni WordPress Loop richiederà un'altra richiesta al database, quindi questo sicuramente rallenterà il tempo di caricamento delle tue pagine.

Ecco come appare la funzione rewind_posts() in azione per elencare i posst del blog:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

	<h1><?php the_title() ;?></h1>		

	<?php the_excerpt(); ?>

<?php endwhile; else: ?>

	<p>Spiacenti, non ci sono posts da visualizzare.</p>

<?php endif; ?>

<?php rewind_posts(); ?>

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

	<h1><?php the_title() ;?></h1>		

	<?php the_excerpt(); ?>

<?php endwhile; else: ?>

	<p>Spiacenti, non ci sono posts da visualizzare.</p>

<?php endif; ?>

Però, con questo codice specifico, il problema è che ogni WordPress Loop produrrà esattamente la stessa cosa. Per fare in modo che i due loop mostrino cose diverse, dovremo dare ai WordPress Loop alcuni parametri in modo da indicare a ciascun loop esattamente ciò che vogliamo visualizzare.

Possiamo impostare i parametri per i cicli usando la funzione query_posts() che può fornire un gran numero di parametri tra cui scegliere per controllare quali post dovranno essere visualizzati da WordPress. Vedremo alcuni di questi in dettaglio nella prossima sezione, quindi diamo un'occhiata al codice necessario per visualizzare l'ultimo post in un formato e dopo elencare i prossimi tre post di seguito sotto.

<?php query_posts('showposts=1&post_type=post'); ?>

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

	<h1><?php the_title() ;?></h1>		
	<?php the_post_thumbnail(); ?>
	<?php the_excerpt(); ?>

<?php endwhile; else: ?>

	<p>Spiacenti, non ci sono posts da visualizzare.</p>

<?php endif; ?>

<hr>

<?php rewind_posts(); ?>

<?php query_posts('showposts=3&offset=1&post_type=post'); ?>

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

	<h2><?php the_title() ;?></h2>		

	<?php the_excerpt(); ?>

<?php endwhile; else: ?>

	<p>Spiacenti, non ci sono posts da visualizzare</p>

<?php endif; ?>

La funzione WP_Query

La funzione query_posts() usata nell'ultima sezione per impostare i parametri per impostare i parametri è parte di una classe (per chi conosce la programmazione ad oggetti) molto potente di WordPress chiamata WP_Query. Questa classe può essere utilizzata per creare loop WordPress molto specifici basati su un numero elevato di opzioni.

La funzione WP_Query viene inserita prima del ciclo. Un aspetto interessante di questa funzione è che tutto ciò che devi fare è posizionarlo prima del ciclo e non devi cambiare nulla sul ciclo stesso.

Ecco alcune delle opzioni WP_Query più comuni:

Di solito tutti i parametri vengono passati alla funzione WP_Query come un array.

Di seguito è riportato un esempio di utilizzo della funzione WP_Query per visualizzare il contenuto di una pagina specifica.

<?php 

	$args = array( 
		'pagename' => 'about-us'
	);
	$the_query = new WP_Query( $args );

?>

<?php if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>

	<h1><?php the_title() ;?></h1>			
	<?php the_excerpt(); ?>

<?php endwhile; else: ?>

	<p>Spiacenti, non ci sono posts da visualizzare.</p>

<?php endif; ?>

In un esempio più complesso, possiamo vedere come visualizzare tutti i post pubblicati da un autore specifico in un tipo di post personalizzato chiamato "workshop". Viene filtrato anche il ciclo in modo che ordini i post in base al titolo e visualizzi solo i "workshop" pubblicati nell'anno 2019.

<?php 

	$args = array( 
		'author_name' => 'zgordon',
		'orderby' => 'title',
		'post_type' => 'workshops'
		'year' => 2019
	);
	$the_query = new WP_Query( $args );

?>

<?php if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>

	<h1><?php the_title() ;?></h1>			
	<?php the_excerpt(); ?>

<?php endwhile; else: ?>

	<p>Spiacenti, non ci sono posts da visualizzare.</p>

<?php endif; ?>

Per approfondire le informazioni su come lavorare con WP_Query è sicuramente opportuno dare uno sguardo nel codex di WordPress.

Conclusione

Non è possibile creare un sito WordPress dinamico senza utilizzare il loop di WordPress, per altro il loop è una funzionalità di WordPress molto potente e, una volta capito, può anche essere notevolmente personalizzato utilizzando una gamma di tag, istruzioni condizionali e la funzione WP_Query.

Copyright © 2023 - P. Iva 02677660546


Another project made with

by Marco Brughi
Città di Castello - Perugia - Arezzo - Firenze
Privacy Policy Cookie Policy
heart