Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress
Code

Padroneggiare WP_Query: Un'Introduzione

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called Mastering WP_Query.
Mastering WP_Query: Using the Loop

Italian (Italiano) translation by Roberta C (you can also view the original English article)

Di default Wordpress effettua una query su ogni pagina del sito visualizzata, la cui natura è determinata dal tipo di pagina visitata. Quindi se viene visitata una pagina statica, Wordpress esegue una query per visualizzare la pagina con l'ID appropriato, se viene visitata una pagina di archivio, la query restituisce tutti gli articoli in quell'archivio.

Ma a volte si potrebbero voler fare le cose un po' diversamente. Nel contenuto principale della tua pagina e anche altrove sempre nella pagina (ad esempio nella barra laterale o nel footer), è possibile visualizzare un contenuto specifico che non dipende dalla query principale.

La grande notizia è che WordPress lo rende possibile con la classe WP_Query. Questa classe fornisce un gran numero di parametri che è possibile utilizzare per definire quale contenuto si desidera visualizzare (che non deve essere limitato ai post) e quindi scrivere un ciclo che mostrerà il contenuto esattamente come lo si vuole.

In questa serie di dieci parti, Padroneggiare WP_Query, Baris Unver ed io vi mostreremo tutte le caratteristiche di WP_Query affinché una volta completata la serie, sarete in grado di usarla in diversi scenari e e affinare il modo in cui Wordpress effettua le query dei dati sul database del sito.

In questa introduzione mi occuperò di:

  • Che cosa è WP_Query?
  • Perché usare WP_Query?
  • Potenziali problemi / a cosa bisogna prestare attenzione.

Che cosa è WP_Query?

WP_Query è una classe fornita da WordPress. Il fatto che sia una classe significa che tramite esse è possibile accedere rapidamente alle variabili, ai controlli e alle funzioni che sono state codificate in quella classe nel core di WordPress, senza doversi preoccupare di scrivere tutto il codice. Questo rende il tuo codice più efficiente e affidabile.

Se vuoi capire esattamente come WP_Query lavora dietro alle quinte, puoi vederne il codice nel file includes/query.php.

WP_Query consta di quattro elementi principali:

  • gli argomenti per la query, che utilzzano i parametri che verranno trattati in dettaglio in questa serie
  • la query stessa
  • il loop, che visualizzerà i contenuti, i titoli o qualunque cosa si desideri
  • per finire: chiusura dei tag if e while e ripristino dei dati del post

In pratica tutto questo avrà un aspetto simile al seguente:

È possibile definire gli argomenti quando si scrive la query stessa, ma io preferisco definirli prima, per tenere le cose ordinate.

Reimpostare i dati del post

Nell'esempio precedente ho aggiunto wp_reset_postdata() dopo ogni query. Questo è importante perché reimposta la query tornando alla query principale eseguita su quella pagina.

Ad esempio, se usiamo WP_Query per eseguire una query nella barra laterale, utilizzando wp_reset_postdata() diciamo ad WordPress che siamo ancora su qualunque pagina viene visualizzata e che dovrebbe funzionare con la query predefinita per quella pagina.

Se non lo facciamo, ogni query in esecuzione nella pagina (inclusa quella predefinita) viene interrotta, e qualsiasi tag condizionale controlli quale tipo di pagina stiamo vedendo non funzionerà.

Perché usare WP_Query?

Se avete mai utilizzato la classe WP_Query prima d'ora,  ci si potrebbe chiedere perché invece iniziare a farlo. Qui ho intenzione di concentrarmi su due aspetti: perché usare WP_Query rispetto ad altri metodi di scrittura di query personalizzate e scenari dove si potrebbe voler utilizzare WP_Query.

Perché usare WP_Query rispetto ad altri metodi?

WP_Query non è l'unico metodo per creare una query personalizzata. Ce ne sono altri quattro:

  • pre_get_posts
  • get_posts()
  • get_pages()
  • query_posts() (che si dovrebbe evitare di usare, come spiegherò)

Non ho intenzione dilungarmi troppo nei dettagli per quanto riguarda il funzionamento di ciascuno di questi, ma è utile sapere quando sono usati:

  • pre_get_posts è un gancio che consente di modificare la query principale. È possibile usarlo con un tag condizionale per controllare se un certo tipo di pagina viene visualizzato (ad esempio l'home page) e quindi utilizzarlo per modificare la query che viene eseguita (ad esempio per rimuovere i tre post più recenti, se li stai visualizzando altrove nella pagina). È un modo molto efficiente di modificare la query principale e dovrebbe essere la prima soluzione, se questo è ciò che si vuole fare. Tuttavia non è possibile utilizzarla per creare una nuova query.
  • get_posts() e get_pages() sono molto simili, la loro differenza principale è evidente nei loro nomi. Questi template tag usano la classe WP_Query, quindi sono un altro modo di fare la stessa cosa, ma aggiungono un ulteriore passaggio perché chiamano la classe WP_Query invece di farlo direttamente. È possibile utilizzali solo per eseguire query in post o pagine, mentre WP_Query stessa è più potente e consente di eseguire query di qualunque cosa nel database.
  • query_posts() modifica la query principale ma non dovrebbe essere usato in plugin o temi. Questo è perché elimina la query principale e inizia tutto da capo, sostituendo la query principale con una nuova query. È anche soggetto a errori, specialmente con l'impaginazione, è inefficiente e influenzerà i tempi di caricamento della pagina. Se c'è bisogno di modificare la query principale, meglio invece utilizzare pre_get_posts, oppure, se si desidera creare una nuova query, utilizzare WP_Query.

Nel diagramma seguente, pubblicato da Andrey “Rarst” Savchenko con licenza Creative Commons, si può vedere quanto detto:

Make Sense of WP_Query Functions

Quando si dovrebbe utilizzare WP_Query

Ci sono molti scenari nei quali WP_Query sarà utile, non posso mostrarli tutti, ma ecco una panoramica:

  • Per aggiungere un elenco di post correlati sotto il post corrente — ad esempio un elenco di tutti i posti della stessa categoria.
  • Per creare due loop nella stessa pagina: ad esempio una pagina di FAQ con nella parte superiore i titoli di domanda e nella parte inferiore il contenuto.
  • Per creare un elenco personalizzato di post recenti nella barra laterale o nel footer del sito, quando il widget post recenti non fa quello che serve (o se si vuole svilupparlo da soli).
  • Per creare query personalizzate per tassonomie, utilizzando più di una tassonomia per definire ciò che viene visualizzato.
  • Per eseguire query su tipi di post non previsti dalla query predefinita, ad esempio gli allegati.
  • Per creare pagine personalizzate con un numero di query per diversi tipi di contenuto, come ho fatto per un cliente in questo sito di esempio.

Alcune avvertenze

La classe WP_Query è ottima. Creo un sacco di siti che necessitano di query personalizzate, quindi io la uso spesso. Ma non è priva di svantaggi. Qui ci sono alcune cose di cui si dovrebbe essere consapevoli:

  • Se tutto quello che volete fare è cambiare il modo in cui i post vengono visualizzati per un determinato tipo di contenuto o un archivio, non utilizzate WP_Query. Invece, semplicemente create un template per quel tipo di contenuto o di archivio e modificate il loop in quel template.
  • Se si desidera visualizzare più o meno post rispetto a quelli che normalmente sarebbe visualizzati su una pagina di archivio (ad esempio non visualizzare una determinata categoria), non utilizzate WP_Query per creare una nuova query. Utilizzate invece pre_get_posts per modificare la query principale, insieme ad un tag condizionale per specificare dove esattamente si desidera farlo.
  • Fate attenzione a non eseguire troppe query in una pagina. Si potrebbe teoricamente creare una pagina con centinaia di query personalizzate, ma appesantendo il carico del server. Se avete bisogno di più di quattro o cinque query su una pagina, è meglio considerare la creazione di più pagine.

Riepilogo

La classe WP_Query è uno strumento potente ed estremamente utile per la creazione di query personalizzate e fanno in modo che il vostro sito WordPress si comporti esattamente come si desidera. Come abbiamo visto, ci sono momenti in cui si sarebbemeglio usare altri metodi per creare query personalizzate, ma ha comunque una vasta gamma di usi.

Nel resto della serie, vi accompagneremo attraverso i dettagli di come utilizzare WP_Query e ottenere il massimo.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.