Get Adobe Flash player

Categorie

ricrea-grafica.com

Name: 
Email: 
Free Autoresponder per gentile concessione di Software for Email Marketing.

WordPress: creare Loop con query personalizzate

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 diceGavello, 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.

 

Fonte

Related posts:

  1. Come creare contenuti di qualità utili agli utenti
  2. Come creare una Newsletter con WordPress e FeedBurner
  3. Escludere una categoria da tutte le sezioni di WordPress
  4. Plugin WordPress per pubblicare su Twitter i nostri post
  5. WordPress: aggiungere un testo alla fine del feed RSS

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

*

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>