BigThink

WordPress: creare Loop con query personalizzate

Loop

Oggi vorrei trattare un argomento abbastanza tecnico, utile a chi sviluppa plugin per WordPress, Widget o temi, ma anche a chi è solito mettere mano al template del proprio blog: creare query personalizzate con WordPress.

Quando ci capita di dover interagire con il Loop principale della pagina, possiamo tranquillamente usare la solita query_posts, che di problemi non ne ha ed è facile da usare.

Tuttavia, nel caso dovessimo inserire una sezione di post in evidenza, piuttosto che un elenco di post di una certa categoria, possono sorgere dei problemi abbastanza fastidiosi.

Vediamo quali e come risolverli.

Il problema

Nell’articolo WordPress: creare una sezione di post in Evidenza, utilizzavo il codice seguente per inserire un Loop personalizzato, che mostrasse i post della categoria scelta:

<?php query_posts('cat=40'); ?>
<ul>
    <?php if (have_posts()) : while(have_posts()) : the_post(); ?>
    <li>
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br />
        <?php the_time('j F Y'); ?>
    </li>
    <?php endwhile; endif; ?>
</ul>

Se lo inserite in una sidebar posta a destra nel vostro template, ed in particolare se questo codice è DOPO il Loop principale della pagina, non c’è alcun problema. Tutto fila liscio.

Ma ecco l’inghippo: se avete una sidebar sulla sinistra e tale codice PRECEDE il Loop con i post nella pagina, questo potrebbe andare ad interferire in vari modi con quest’ultimo.

Potrebbe. Non è detto, però è altamente probabile, in quanto la funzione query_posts soffre appunto di questo ed altri problemi:

  • Interferisce potenzialmente con altri plugin che usano Loop.
  • Invalida potenzialmente i tag condizionali di WordPress.
  • Bisognerebbe far particolare attenzione a resetterla ogni volta, non sovrascrivere le opzioni…

Quella che dovrebbe essere il “coltellino svizzero di ogni buon tema personalizzato”, come dice Gavello, risulta non essere sempre la scelta migliore.

La soluzione

Non temete, a tutto c’è rimedio!

Viene in nostro aiuto la comodissima classe WP_Query, che ha un metodo che si comporta esattamente come query_posts, ma non ha effetti collaterali (beata programmazione OO!!).

Così diventa allora il codice precedente:

<?php
    $specialPosts = new WP_Query();
    $specialPosts->query('cat=40');
?>
<ul>
    <?php if ($specialPosts->have_posts()) : while($specialPosts->have_posts()) : $specialPosts->the_post(); ?>
    <li>
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br />
        <?php the_time('j F Y'); ?>
    </li>
    <?php endwhile; endif; ?>
</ul>

Da notare la variabile $specialPosts, oltre che nell’istanziazione iniziale, anche nella testa del Loop. All’interno di esso potremo usare i soliti tag per stampare title, permalink, content e tutto il resto.

Il metodo query accetta gli stessi parametri di query_posts.

Il mio consiglio è quindi quello di usare il solito query_posts nel caso stiate lavorando sul Loop principale della pagina, mentre utilizzare WP_Query per i Loop esterni.

Articolo scritto da Ghido

Fondatore di BigThink.it, si occupa dello sviluppo e del coordinamento dei progetti tecnologici. Specializzato nel Marketing su Facebook e nello sviluppo di Applicazioni Social, fa consulenza e formazione ad aziende ed agenzie.

Leggi anche...

Usare TinyMCE come editor dei nostri plugin WordPress

Usare TinyMCE come editor dei nostri plugin WordPress

Settimana scorsa vi ho spiegato come inserire l'editor di WordPress nei vostri plugin, tuttavia dopo svariati test, ho trovato alcuni limiti nello script che vi ho proposto: la parte di HTML non funziona; è compatibile solo con le ultime versioni di WordPress; non è possibile inserire più di un editor nella stessa pagina. Alla luce di questi ...
WordPress: Dare agli spammer la possibilità di redimersi

WordPress: Dare agli spammer la possibilità di redimersi

Si conclude oggi la miniserie di Camu: dopo aver visto come va modificato l'.htaccess e come farlo in automatico, oggi impariamo a personalizzare la pagina di errore. Dai commenti sul mio blog alla prima puntata di questa miniserie è venuta fuori un'interessante discussione su cosa "vedono" gli spammer presenti nella lista nera quando tentano ...
WordPress: Inserire l'anteprima automatica dei video di YouTube

WordPress: Inserire l’anteprima automatica dei video di YouTube

Molti blog pubblicano contenuti provenienti da YouTube, tuttavia al momento dell’inserimento sulle Pagine Fan di Facebook non hanno a disposizione un’immagine di anteprima che attiri gli utenti a cliccare. Devono quindi usare sempre la stessa di Default. Quello che vi voglio proporre oggi è un sistema che in pochi e semplici step vi consentirà ...
Integrare il pulsante "Condividi" con Facebook Connect

Integrare il pulsante “Condividi” con Facebook Connect

Praticamente tutti i blog hanno ormai un pulsante "Condividi su Facebook" che apre una noiosa finestra popup esterna per pubblicare l'articolo sulla bacheca del proprio profilo. E se invece integrassimo questa funzionalità con Facebook Connect? Cosa succederebbe? Semplice, invece di avere una finestra esterna, si aprirebbe un layer interno alla pagina con il famoso ...
Un gancio per attaccarsi a WordPress

Un gancio per attaccarsi a WordPress

Con questo primo Guest Post inizia una miniserie di articoli scritti da Camu, che ci condurrà passo-passo nella personalizzazione del nostro blog WordPress. Una delle funzionalità che fanno di WordPress una piattaforma su cui sviluppare funzionalità personalizzate per il proprio sito, è la capacità di essere esteso tramite i cosiddetti plugin. Possiamo fare l'analogia con ...

17 Commenti

  1. ciao e complimenti
    ma essendo che di wordpress ne capisco poco
    che prima usavo la piattaforma blooger
    volevo sapere se ce un post che spiega questi passi per creare dei box da inserire in home per determinata categoria esempio qui grazie http://tuoguru.com/divisione-in-categorie-nella-home-page-di-wordpress/

    5 novembre 2011, 23:31
  2. Ciao Daniele, ho implementato il secondo script sul mio blog, perchè il primo creava i problemi che indichi tu nel tuo articolo. Funziona tutoo bene tranne che per una cosa, quando mi capita di inserire il tag , per articoli più lunghi, cliccando sulla scritta continua a leggere, oppure sul titolo o semplicemente entrando anche nel post in questione, l’articolo perde le funzionalità del tag more e mostra l’articolo completo anche nella sidebar, con relativi problemi di lettura. Come potrei risolvere? Grazie, Antonio

    15 febbraio 2010, 11:19
    • Ho risolto da solo, ho inserito

      Prima di

      15 febbraio 2010, 12:33
  3. forse arrivo tardino, ma avrei una domanda da fare.

    Per creare un loop che visualizza solo un articolo per categorie in homepage come posso fare?

    21 gennaio 2010, 10:53
  4. giusto… mi era sfuggita questa cosa… bravo bravo

    altra domanda
    mettiamo caso che questa categoria si deve scegliere dal pannello di amministrazione, come si potrebbe fare…
    la mia idea era di fare diciamo una categoria a parte, chiamata, che ne so.. post in evidenza, e poi mettere ANCHE li i post interessati, però non so se mi piace come soluzione, è un pò rozza diciamo

    idee ?

    3 luglio 2009, 22:19
  5. bell’articolo… molto utile
    una domandina…

    per gestire il NUMERO di post da visualizzare, devo impostare un contatore interno al while giusto ? azzero fuori il contatore e poi aggiorno passo passo…

    altra domandina, se vorrei i post di due categorie, basta mettere la virgola tra una e l’altra ?

    cioè
    $specialPosts->query(‘cat=40’);
    diventa
    $specialPosts->query(‘cat=40, 50, 60’);

    a breve testo il tutto

    3 luglio 2009, 20:05
    • Per visualizzare solo un certo numero di post (ad esempio 5), basta usare il parametro showpost:

      $specialPosts->query('cat=40&showposts=5');.

      Per più categorie, si usa la virgola, sì 😉

      3 luglio 2009, 21:56
      • Paolo

        io ho lasciato semplicemente il codice che c’era su ad esempio The latest news (ovviamente modificato per la categoria che mi interessa) e aggiunto nel modo che consigliavate.

        Rumori

        <a href="”>

        14 ottobre 2009, 11:38
  6. Già, in effetti è uno dei primi problemi che si incontrano non appena si cerca di scrivere un tema custom. Poi ci si prende la mano, certo, ma agli inizi può essere un bel grattacapo.

    Per quanto mi riguarda, piuttosto che resettare ogni volta query_posts (che crea più problemi che altro sul lungo periodo) preferisco senza alcun dubbio affidarmi alla creazione di nuovi oggetti WP_Query su misura.

    3 luglio 2009, 13:43

7 Citazioni