loop-di-wordpress

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 endwhileendif. Il ciclo deve sempre iniziare con le stesse istruzioni ifwhile, 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.

È possibile includere un messaggio 404 personalizzato “non trovato (not found)” che verrà visualizzato se non sono disponibili post corrispondenti ai criteri specificati. Il messaggio deve essere inserito tra le istruzioni endwhileendif, 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:

  1. Utilizzando la funzione rewind_posts(); 
  2. 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$postnel 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 $postsulla 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