
Condividi questo contenuto!
In questa guida ti spiegheremo cosa è il loop di WordPress e quale è la sua funzione.
Cosa è il loop di WordPress?
Il loop di WordPress, o semplicemente loop (in italiano ciclo), è un codice PHP che mostra i post di WordPress. Il loop viene utilizzato nei temi di WordPress per visualizzare un elenco di post in una pagina web.
All’interno del loop ci sono alcune funzioni che vengono eseguite di default per visualizzare i post. Gli sviluppatori di temi possono formattare l’output utilizzando i tag del template per personalizzare la modalità di visualizzazione di ogni post all’interno del loop. Esistono diversi tag Template che funzionano solo all’interno del loop di WordPress e possono essere utilizzati per formattare, organizzare e pubblicare i dati dei post. Il loop di WordPress è probabilmente uno degli aspetti più importanti del codice WordPress e al centro della maggior parte delle query in un modo o nell’altro.
Puoi usare il Loop per una serie di cose diverse, ad esempio per:
- visualizzare i titoli dei post e gli estratti sulla home page del tuo blog;
- visualizzare il contenuto e i commenti su un singolo post;
- visualizzare il contenuto su una singola pagina utilizzando i tag del template
- visualizzare i dati dai tipi di post personalizzati e dai campi personalizzati.
Come funziona il loop di WordPress?
Il loop di base è:
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); // Display post content endwhile; endif; ?>
Questo loop dice che quando ci sono post, passa in rassegna e visualizza i post. Suddiviso in modo più dettagliato:
- La funzione have_posts() controlla se ci sono post.
- Se ci sono post, il loop while continua ad essere eseguito fintanto che la condizione tra parentesi è logicamente vera. Finché
have_posts()
continua a essere vero, il loop continuerà. - La fine del Loop è mostrata con una
endwhile
eendif
. Il ciclo deve sempre iniziare con le stesse istruzioniif
ewhile
, come menzionato sopra e deve terminare con le stesse istruzioni finali.
Qualsiasi tag del template (ossia comandi per recuperare dati dal database ed eventualmente visualizzarli sulla pagina) che desideri applicare a tutti i post deve esistere tra le istruzioni di inizio e fine del loop di WordPress.
endwhile
e endif
, come mostrato negli esempi seguenti.Un template di pagina con un loop estremamente semplice sarebbe simile a:
<?php get_header(); if ( have_posts() ) : while ( have_posts() ) : the_post(); the_content(); endwhile; else : _e( 'Sorry, no posts matched your criteria.', 'textdomain' ); endif; get_sidebar(); get_footer(); ?>
Cosa può visualizzare il loop
Il Loop può visualizzare un numero di elementi diversi per ogni post. Ad esempio, alcuni tag template comuni utilizzati in molti temi sono:
next_post_link()- un collegamento al post pubblicato cronologicamente dopo il post corrente
previous_post_link()- un collegamento al post pubblicato cronologicamente prima del post corrente
the_category() – la categoria o le categorie associate al post o alla pagina visualizzata
the_author() – l’autore del post o della pagina
the_content() – il contenuto principale di un post o di una pagina
the_excerpt()- le prime 55 parole del contenuto principale di un post seguite da un puntino di sospensione (…) o leggi altro link che va al post completo.
the_ID() – l’ID del post o della pagina
the_meta() – i campi personalizzati associati al post o alla pagina
the_shortlink() – un collegamento alla pagina o al post utilizzando l’URL del sito e l’ID del post o della pagina
the_tags() – il tag o i tag associati al post
the_title() – il titolo del post o della pagina
the_time()- l’ora o la data del post o della pagina. Questo può essere personalizzato utilizzando la formattazione della funzione di data php standard.
Puoi anche utilizzare tag condizionali, come:
is_home() – Restituisce vero se la pagina corrente è la home page
is_admin() – Restituisce vero se all’interno della schermata di amministrazione, falso in caso contrario
is_single() – Restituisce vero se la pagina sta attualmente visualizzando un singolo post
is_page() – Restituisce vero se la pagina sta attualmente visualizzando una singola pagina
is_page_template() – Può essere utilizzato per determinare se una pagina utilizza un template specifico, ad esempio:
is_page_template('about-page.php')
is_category() – Restituisce vero se la pagina o il post ha la categoria specificata, ad esempio:
is_category('news')
is_tag() – Restituisce vero se una pagina o un post ha il tag specificato
is_author() – Restituisce vero se all’interno della pagina di archivio dell’autore
is_search() – Restituisce vero se la pagina corrente è una pagina dei risultati di ricerca
is_404() – Restituisce vero se la pagina corrente non esiste
has_excerpt() – Restituisce vero se il post o la pagina contiene un estratto
Esempi di loop di WordPress
Facciamo ora qualche esempio concreto di come usare il loop di WordPress per un sito web.
Archivio del blog
La maggior parte dei blog ha una pagina di archivio del blog, che mostra una serie di cose tra cui il titolo del post, la miniatura e l’estratto. L’esempio seguente mostra un semplice loop che controlla se ci sono post e, se ce ne sono, restituisce il titolo, la miniatura e l’estratto di ogni post. Se non esistono post, visualizza il messaggio tra parentesi.
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); the_title( '<h2>', '</h2>' ); the_post_thumbnail(); the_excerpt(); endwhile; else: _e( 'Sorry, no posts matched your criteria.', 'textdomain' ); endif; ?>
Post singolo
In WordPress, ogni post ha la sua pagina, che mostra le informazioni rilevanti per quel post. I tag template consentono di personalizzare le informazioni che si desidera visualizzare.
Nell’esempio seguente, il loop restituisce il titolo e il contenuto del post. Puoi utilizzare questo esempio in un file modello di pagina o post per visualizzare le informazioni di base sul post. Puoi anche personalizzare questo modello per aggiungere più dati al post, ad esempio la categoria.
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); the_title( '<h1>', '</h1>' ); the_content(); endwhile; else: _e( 'Sorry, no pages matched your criteria.', 'textdomain' ); endif; ?>
Post singolo personalizzato in base alla categoria
L’esempio seguente fa un paio di cose:
- Innanzitutto, visualizza ogni post con il suo titolo, ora, autore, contenuto e categoria, in modo simile all’esempio di singolo post sopra.
- Successivamente, rende possibile che i post con l’ID categoria “3” abbiano uno stile diverso, utilizzando il tag template in_category()
I commenti sul codice in questo esempio (in inglese) forniscono dettagli in ogni fase del loop:
<?php // Start the Loop. if ( have_posts() ) : while ( have_posts() ) : the_post(); /* * See if the current post is in category 3. * If it is, the div is given the CSS class "post-category-three". * Otherwise, the div is given the CSS class "post". */ if ( in_category( 3 ) ) : ?> <div class="post-category-three"> <?php else : ?> <div class="post"> <?php endif; // Display the post's title. the_title( '<h2>', ';</h2>' ); // Display a link to other posts by this posts author. printf( __( 'Posted by %s', 'textdomain' ), get_the_author_posts_link() ); // Display the post's content in a div. ?> <div class="entry"> <?php the_content() ?> </div> <?php // Display a comma separated list of the post's categories. _e( 'Posted in ', 'textdomain' ); the_category( ', ' ); // closes the first div box with the class of "post" or "post-cat-three" ?> </div> <?php // Stop the Loop, but allow for a "if not posts" situation endwhile; else : /* * The very first "if" tested to see if there were any posts to * display. This "else" part tells what do if there weren't any. */ _e( 'Sorry, no posts matched your criteria.', 'textdomain' ); // Completely stop the Loop. endif; ?>
Loop multipli
In alcune situazioni, potrebbe essere necessario utilizzare più di un loop. Ad esempio, potresti voler visualizzare i titoli dei post in un elenco dei contenuti nella parte superiore della pagina e quindi visualizzare il contenuto più in basso nella pagina. Poiché la query non viene modificata, è sufficiente riavvolgere il loop quando è necessario scorrere i post per la seconda volta. Per questo useremo la funzione rewind_posts () .
rewind_posts()
È possibile utilizzare rewind_posts() per ripetere la stessa query una seconda volta. Ciò è utile se desideri visualizzare la stessa query due volte in posizioni diverse su una pagina.
Ecco un esempio di utilizzo di rewind_posts()
:
<?php // Start the main loop if ( have_posts() ) : while ( have_posts() ) : the_post(); the_title(); endwhile; endif; // Use rewind_posts() to use the query a second time. rewind_posts(); // Start a new loop while ( have_posts() ) : the_post(); the_content(); endwhile; ?>
Creazione di query e loop secondari
Usare due loop con la stessa query è stato relativamente facile, ma non è sempre quello di cui avrai bisogno. Invece, dovrai spesso creare una query secondaria per visualizzare contenuti diversi nel modello di pagina. Ad esempio, potresti voler visualizzare due gruppi di post sulla stessa pagina, ma fare cose diverse per ogni gruppo. Un esempio comune di questo, come mostrato di seguito, è la visualizzazione di un singolo post con un elenco di post della stessa categoria sotto il singolo post.
<?php // The main query. if ( have_posts() ) : while ( have_posts() ) : the_post(); the_title(); the_content(); endwhile; else : // When no posts are found, output this text. _e( 'Sorry, no posts matched your criteria.' ); endif; wp_reset_postdata(); /* * The secondary query. Note that you can use any category name here. In our example, * we use "example-category". */ $secondary_query = new WP_Query( 'category_name=example-category' ); // The second loop. if ( $secondary_query->have_posts() ) echo '<ul>'; while ( $secondary_query->have_posts() ) : $secondary_query->the_post(); the_title( '<li>', '</li>' ); endwhile; echo '</ul>'; endif; wp_reset_postdata(); ?>
Come puoi vedere nell’esempio sopra, per prima cosa mostriamo un loop regolare. Quindi definiamo una nuova variabile che utilizza WP_Query per interrogare una categoria specifica; nel nostro caso, abbiamo scelto lo slug example-category.
Nota che il loop regolare nell’esempio sopra ha una differenza: chiama wp_reset_postdata() per ripristinare i dati del post. Prima di poter utilizzare un secondo loop, è necessario reimpostare i dati del post. Ci sono due modi per farlo:
- Utilizzando la funzione rewind_posts();
- Creando nuovi oggetti di query.
Resettare loop multipli
Quando si utilizzano più loop in un modello è importante reimpostarli. Non farlo può portare a risultati imprevisti a causa del modo in cui i dati vengono archiviati e utilizzati all’interno della variabile globale$post
. Esistono tre modi principali per resettare il loop a seconda del modo in cui vengono chiamati.
- wp_reset_postdata()
- wp_reset_query()
- rewind_posts()
wp_reset_postdata()
Utilizzare wp_reset_postdata() quando si eseguono loop personalizzati o multipli con WP_Query
. Questa funzione ripristina la variabile globale$post
nel post corrente nella query principale. Se stai seguendo le migliori pratiche, questa è la funzione più comune che utilizzerai per ripristinare i loop.
Per utilizzare correttamente questa funzione, inserire il codice seguente dopo ogni ciclo con WP_Query
:
<?php wp_reset_postdata(); ?>
Ecco un esempio di un loop che utilizza WP_Query
che viene ripristinato con wp_reset_postdata().
<?php // Example argument that defines three posts per page. $args = array( 'posts_per_page' => 3 ); // Variable to call WP_Query. $the_query = new WP_Query( $args ); if ( $the_query->have_posts() ) : // Start the Loop while ( $the_query->have_posts() ) : $the_query->the_post(); the_title(); the_excerpt(); // End the Loop endwhile; else: // If no posts match this query, output this text. _e( 'Sorry, no posts matched your criteria.', 'textdomain' ); endif; wp_reset_postdata(); ?>
wp_reset_query()
L’utilizzo di wp_reset_query() ripristina WP_Query e i dati globali $post
sulla query principale originale. È NECESSARIO utilizzare questa funzione per ripristinare il loop se si utilizza query_posts() all’interno del loop. Puoi usarlo dopo i loop di WordPress personalizzati con WP_Query perché in realtà chiama wp_reset_postdata() quando viene eseguito. Tuttavia, è consigliabile utilizzare wp_reset_postdata() con qualsiasi loop personalizzato che coinvolge WP_Query
.
Attenzione: query_posts() non è la migliore pratica e dovrebbe essere evitata se possibile. Pertanto, non dovresti usare molto wp_reset_query().
Per utilizzare correttamente questa funzione, inserire il codice seguente dopo ogni loop con query_posts().
<?php wp_reset_query(); ?>
E’ tutto. Speriamo che questa guida ti abbia aiutato a capire cosa sono i loop di WordPress e ti abbia fornito una solida base per utilizzarli nei tuoi modelli di pagina. Potresti voler dare una occhiata anche alla nostra guida introduttiva alla gestione del database WordPress con phpMyAdmin.
Dichiarazione sulla trasparenza: il contenuto di B-Fast è supportato dal lettore, il che significa che se fai clic su alcuni dei collegamenti in questo post, potremmo guadagnare una piccola tassa di riferimento. Tieni presente che raccomandiamo solo prodotti che utilizziamo noi stessi e / o che riteniamo possano aggiungere valore ai nostri lettori.
Condividi questo contenuto!
Related Posts