WordPress: il Loop che visualizza i post

Utilizzando il Loop, WordPress processa ogni post per visualizzarlo nella pagina corrente secondo quanto stabilito dalle funzioni del Loop (dette Loop Tag). Il codice HTML o PHP inserito all’interno del Loop viene ripetuto per ciascun post.

Il Loop deve essere utilizzato all’interno dei file del tema (vedi: La struttura di un tema WordPress). Si possono creare dei template senza Loop, ma in tal caso non è possibile visualizzare i dati dei post.

Quando si carica una pagina, WordPress innanzitutto controlla che tutti i file necessari al funzionamento siano presenti, quindi carica dal database le impostazioni definite dall’amministratore del blog: numero di post per pagina, commenti abilitati ecc. A questo punto WordPress controlla cosa è stato richiesto e determina quali post caricare dal database.

Struttura del loop di WordPress

I dati dei post letti dal database vengono salvati all’interno di un’apposita variabile a cui il Loop fa accesso per visualizzare i valori all’interno del tema.

La pagina Index più semplice

Il codice seguente rappresenta la pagina index più semplice che si possa scrivere e visualizza solo il contenuto dei post. Il numero dei post è definito nelle impostazioni generali.

<?php
get_header();
if (have_posts()) :
   while (have_posts()) :
      the_post();
      the_content();
   endwhile;
endif;
get_sidebar();
get_footer();
?>

Il loop del tema di Default – index.php

Quanto segue è l’analisi del loop presente nel tema di default di WordPress, prima dell’avvento di Twenty Ten e Twenty Eleven. Questi ultimi hanno aggiunto maggiore complessità e quindi non sono molto adatti a scopo didattico.

Inzio del loop

Il seguente codice rappresenta l’inizio del Loop:

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
  1. Controlla se sono stati letti dei post dal database mediante la funzione have_posts().
  2. Se ci sono post, inizia un ciclo PHP mediante l’istruzione while. Il ciclo while viene ripetuto finché la condizione tra parentesi è verificata, cioè finché ci sono post.
  3. La funzione have_posts() semplicemente controlla all’interno della variabile che contiene tutti i post letti dal database se c’è ancora un’altro elemento. In caso affermativo restituisce vero, altrimenti falso.

Generare il post

La funzione the_post() prende l’elemento corrente nella variabile che contiene tutti i post e lo rende disponibile all’interno del Loop. Senza la chiamata di questa funzione, molti dei Loop Tag non funzionano.

Titolo, data e autore

Il codice seguente utilizza alcuni Loop tag per stampare il titolo con link all’articolo e le informazioni su data e autore.

<h2 id="post-<?php the_ID(); ?>">
<a href="<?php the_permalink() ?>" rel="bookmark">
<?php the_title(); ?></a></h2>
<small><?php the_time('F jS, Y') ?> <!-- by <?php the_author() ?> --></small>

Contenuto del post

Il Loop tag the_content() visualizza il contenuto del post.

<div>
<?php the_content('Leggi tutto &raquo;'); ?>
</div>

Utilizzando il pulsante more, mostrato nell’editor come <!–more–>, all’interno del contenuto del post, soltanto la parte al di sopra verrà visualizzata. Questo può essere utile per creare una pagina home che non visualizza tutti i post per esteso. Quando si visita la pagina del singolo post, il more viene ignorato e quindi si può leggere l’intero contenuto.

Altri Dettagli

Dopo il contenuto del post, solitamente si visualizzano alcuni dettagli aggiuntivi del post, come le categorie di appartenenza, un link ai commenti e magari anche il link per la modifica del post.

<p>
Posted in <?php the_category(', ') ?>
<strong>|</strong>
<?php edit_post_link('Edit','','<strong>|</strong>'); ?>
<?php
comments_popup_link('Nessun Commento »', '1 Commento »', '% Commenti »');
?></p>

Fine del loop

La seguente istruzione termina il Loop:

<?php endwhile; ?>

Al di sotto, i Loop Tag non funzioneranno correttamente (nella migliore delle ipotesi visualizzeranno le informazioni dell’ultimo post del Loop).

Solitamente a questo punto si inserisce il codice necessario per la navigazione per visualizzare i post più vecchi o i più recenti.

 <div>
 <div><?php previous_posts_link('&laquo; Post più vecchi') ?></div>
 <div><?php next_posts_link('Post più recenti &raquo;','') ?></div>
 </div>

Se il blog è impostato per visualizzare 10 post per pagina, e il Loop legge 25 post dal database, allora ci saranno 3 pagine tra cui navigare: due da 10 post e una da 5. I link di navigazione consentono ai visitatori di muoversi tra le tre pagine.

I link di navigazione si trovano al di fuori del Loop, ma all’interno dell’istruzione if, in modo tale che vengano visualizzati solo se ci sono dei post.

L’istruzione else qui sotto serve nel caso in cui la funzione have_posts() che si trova all’inizio dia risultato falso.

<?php else : ?>
 <h2>Not Found</h2>
 <p>
<?php _e("Sorry, but you are looking for something that isn't here."); ?></p>

In questo caso significa che non ci sono post da visualizzare e questo può significare che il visitatore ha caricato una pagina dentro a cui non ci sono post (es. una categoria vuota).

<?php endif; ?>

Qui termina il costrutto condizionale “Se ci sono post fai questo, altrimenti fai quest’altro”. Al di sotto si includono la sidebar ed il fotter e l’index.php è completo.

Prossimamente vedremo più nel dettaglio i Loop Tag per personalizzare la visualizzazione dei post.

Precedente Grafico della struttura di un tema WordPress Successivo Come creare un menu di navigazione a tendina in WordPress
  • Ciao sto settando una pagina fatta dai custom post type ho un problema di link ti spiego con il codice:

    dove sono i punti interrogativi non so cosa mettere che mi porti alla scheda da me precedentemente realizzata.

    AIUTO GRAZIE

  • il codice non è visualizzato bene!!!!!!!!!!!!! 🙁

    • Non si può inserire il codice puro nei commenti. Devi sostituire > con &gt; e < con &lt;

  • praticamente nel the_title(????????); non so cosa devo inserire

    • devi usare le funzione the_permalink() per stampare il link. Quindi <a href=”<?php the_permalink(); ?>”> <?php the_title(); ?> </a>

  • Ti ringrazio tanto!!!
    Grazie

  • Scusami se ti disturbo
    ho un’altro problema con l’aggiunta di ulteriori 3 siderbar widget nel footer in pratica vorrei aggiungere nel div description che l’ho rinominato #supplementary-2 altre 3 sidebar….

    ho modificato il fuction.php il siderbar-footer.php e i css, il problema fondamentale è che le siderbar le ho aggiunte ma si sballa tutto il css non riconosce più :
    float: left;
    margin-right: 3.7%;
    width: 30.85%;
    anche sulle siderbar native…….

    strano?
    Secondo te cosa può essere, se vuoi e hai tempo ti mado una mail con le modifiche apportata ai files
    ho bisogno della tua email perchè sul sito non c’è…

    Ti ringrazio anticipatamente.

  • mmmm sto lavorando in locale…

    • E’ praticamente impossibile capire cosa non funziona senza vedere la pagina in questione…

  • certo hai ragione cercherò in qualche maniera di farti capire il problema, domani studerò come fare.
    ciao e grazie

  • Ciao scusa se ti disturbo, avrei da farti una domanda.
    Sul mio sito ho realizzato una pagina dove i clienti possono lasciare il proprio commento…funziona tutto bene solo che nella visualizzazione della pagina le risposte vengono ripetute 2 volte compreso il form…non so sinceramente come risolvere questo problema…sono a corto di html e similari…quindi mi scuso fin d’ora per la mia ignoranza.

    La pagina in questione è questa http://www.netsystembo.com/?page_id=365

    Grazie

    • E’difficile capire da cosa possa essere causato. Prova a controllare all’interno del file page.php del tema se il codice dei commenti è ripetuto due volte.

  • Michele Malagnini

    ciao ho un problema , sto customizzando un tema wordpress, non riesco ad inserire nella pagina statica il loop dei post wordpress, questa è la pagina : giuda.net/beta

    questo è il codice che sto usando :

    “TEENAGE REBEL”

    A NEW SINGLE FROM – GIUDA – BUY IT NOWBUY IT DIGITAL

    – SIDE A – Teenage Rebel

    – SIDE B – It’s My City

    BUY IT NOW

    sto facendo qualche errore madornale lo so pero’ì non riesco ad uscirne fuori potete aiutarmi perfavore? 🙂