Padroneggiare WP_Query un'introduzione

Per impostazione predefinita, WordPress eseguirà una query su ogni pagina visualizzata dal tuo sito, la cui natura sarà determinata dal tipo di pagina visualizzata. Quindi, se viene visualizzata una pagina statica, WordPress esegue una query per visualizzare la pagina con l'ID pertinente, mentre se viene visualizzata una pagina di archivio, la query recupererà tutti i post in quell'archivio.

Ma a volte vuoi fare le cose in modo un po 'diverso. Nel contenuto principale della tua pagina o altrove nella pagina (come nella barra laterale o nel piè di pagina), potresti voler visualizzare del contenuto specifico che non viene prodotto dalla query standard.

La grande notizia è che WordPress rende possibile ciò con WP_Query classe. Questa classe ti fornisce un gran numero di parametri che puoi usare per definire quali contenuti vuoi esportare (che non devono essere limitati ai post) e poi scrivere un ciclo che mostrerà il contenuto esattamente come vuoi.

In questa serie di diciannove parti su Mastering WP_Query, Baris Unver e io ti condurremo attraverso i dettagli di WP_Query in modo che una volta completata la serie, sarai in grado di usarla in una varietà di scenari e perfezionare il modo in cui WordPress interroga i dati nel database del tuo sito.

In questa introduzione parlerò di quanto segue:

  • Cosa è WP_Query?
  • Perché usare WP_Query?
  • Potenziali problemi / cosa essere a conoscenza.

Che cos'è WP_Query?

WP_Query è una classe fornita da WordPress. Il fatto che si tratti di una classe significa che, usandolo, è possibile accedere rapidamente alle variabili, ai controlli e alle funzioni che sono stati codificati in quella classe nel core di WordPress, senza doversi preoccupare di scrivere tutto quel codice da soli. Questo rende il tuo codice più efficiente e affidabile.

Se vuoi capire esattamente come WP_Query funziona sotto il cofano, puoi vedere il suo codice nel includes / query.php file.

WP_Query consiste di quattro elementi principali:

  • gli argomenti per la query, utilizzando i parametri che saranno trattati in dettaglio in questa serie
  • la query stessa
  • il ciclo, che produrrà il contenuto del post, i titoli o qualsiasi cosa tu voglia visualizzare
  • terminare: chiudere se e mentre tag e reimpostare i dati

In pratica questo sarà simile al seguente:

have_posts ()) // Inizia il ciclo sui risultati della query. while ($ query-> have_posts ()) $ query-> the_post (); // I contenuti dei risultati dei post interrogati vanno qui.  // Ripristina i dati del post originale. wp_reset_postdata (); ?>

Puoi definire i tuoi argomenti quando scrivi la query stessa, ma preferisco definirli per primi, dato che mantiene le cose in ordine.

Reimpostazione dei dati postali

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

Ad esempio, se stai usando WP_Query per eseguire una query nella barra laterale, utilizzando wp_reset_postdata () dice a WordPress che siamo ancora su qualunque pagina venga visualizzata e che dovrebbe funzionare con la query predefinita per quella pagina. 

Se non si esegue questa operazione, eventuali altre query eseguite nella pagina (inclusa la query predefinita) potrebbero interrompersi e qualsiasi tag condizionale che verifica il tipo di pagina visualizzata non funzionerà.

Perché utilizzare WP_Query?

Se non hai usato il WP_Query prima, potresti chiederti perché dovresti iniziare. Qui mi concentrerò su due aspetti di questo: perché usare WP_Query su altri metodi di scrittura di query personalizzate e scenari in cui potresti voler utilizzare WP_Query.

Perché utilizzare WP_Query su altri metodi?

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

  • pre_get_posts
  • get_posts ()
  • get_pages ()
  • query_posts () (che dovresti evitare, come spiegherò)

Non ho intenzione di entrare in molti dettagli su come ognuno di questi lavori, ma è utile sapere quando vengono utilizzati:

  • pre_get_posts è un hook che modifica la query principale. Puoi usarlo con un tag condizionale per verificare se un determinato tipo di pagina viene visualizzato (ad esempio la home page) e quindi utilizzarlo per modificare la query eseguita (ad esempio per rimuovere i tre post più recenti, se tu? mostrandoli altrove sulla pagina). È un modo molto efficiente di modificare la query principale e dovrebbe essere il tuo primo punto di riferimento se è quello che vuoi fare. Tuttavia non è possibile utilizzarlo per creare una query completamente nuova.
  • get_posts () e get_pages () sono molto simili, con la differenza principale che è evidente dal loro nome. Questi tag modello usano effettivamente il WP_Query classe, quindi sono un altro modo di fare la stessa cosa, ma aggiungere un ulteriore passaggio perché chiamano il WP_Query classe invece di farlo direttamente. Puoi usarli solo per interrogare post o pagine, mentre WP_Query è di per sé più potente e ti consente di interrogare quasi tutto ciò che è contenuto nel tuo database.
  • query_posts () modifica la query principale ma non deve essere utilizzata in plugin o temi. Questo perché getta la query principale e ricomincia da capo, sostituendo la query principale con una nuova query. È inoltre soggetto a errori, in particolare all'impaginazione, ed è inefficiente e influenzerà i tempi di caricamento della pagina. Se è necessario modificare la query principale, utilizzare pre_get_posts invece, e se vuoi creare una query completamente nuova, usa WP_Query.

Lo schema qui sotto, pubblicato da Andrey "Rarst" Savchenko sotto licenza Creative Commons, dà un senso a questo:

Quando è possibile utilizzare WP_Query

Ci sono molti scenari in cui WP_Query tornerà utile, e non posso coprirli tutti qui, ma ecco una panoramica:

  • Per aggiungere un elenco di post correlati sotto il post corrente, ad esempio un elenco di tutti i post nella stessa categoria.
  • Per creare due loop sulla stessa pagina: ad esempio una pagina di domande frequenti con i titoli delle domande nella parte superiore e il contenuto sottostante.
  • Per creare un elenco personalizzato di post recenti nella barra laterale o nel piè di pagina del tuo sito, quando il widget Messaggi recenti non fa ciò che ti serve (o preferisci codificarlo tu stesso).
  • Per creare query personalizzate per tassonomie, utilizzando più di una tassonomia per definire cosa viene visualizzato.
  • Per eseguire query sui tipi di post che non vengono generati dalla query predefinita, ad esempio gli allegati.
  • Per creare pagine personalizzate con un numero di query per diversi tipi di contenuto, come ho fatto in questo esempio di sito per un cliente.

Alcuni avvertimenti

Il WP_Query la classe è grande. Creo molti siti che richiedono query personalizzate, quindi lo uso spesso. Ma non viene senza i suoi lati negativi. Ecco alcune cose di cui dovresti essere a conoscenza:

  • Se tutto ciò che si vuole fare è cambiare il modo in cui i messaggi vengono visualizzati per un particolare tipo di contenuto o archivio, non usare WP_Query. Invece, è sufficiente creare un file modello per quell'archivio o tipo di contenuto e modificare il ciclo in quel file modello.
  • Se vuoi visualizzare alcuni post più o meno di quelli che verrebbero normalmente mostrati in una pagina di archivio (per esempio non mostrare una particolare categoria), non usare WP_Query per creare un'intera nuova query. Invece usa pre_get_posts per modificare la query principale, insieme a un tag condizionale per individuare dove esattamente si vuole farlo.
  • Fai attenzione a troppe query su una pagina. Potresti teoricamente creare una pagina con centinaia di query personalizzate, ma pensa solo al carico del server. Se hai bisogno di più di quattro o cinque query su una pagina, potresti prendere in considerazione la possibilità di creare pagine aggiuntive.

Sommario

Il WP_Query class è uno strumento potente ed estremamente utile per creare query personalizzate e per far sì che il tuo sito WordPress si comporti esattamente come desideri. Come abbiamo visto, ci sono momenti in cui si usano altri metodi per creare query personalizzate, ma ha una vasta gamma di usi.

Nel resto di questa serie, ti mostreremo i dettagli su come utilizzare WP_Query e ottenere il massimo da esso.