Argomenti WP_Query Tassonomie

Finora in questa serie, hai imparato come WP_Query è strutturato e quali sono le sue proprietà e i suoi metodi. Ora stiamo esaminando i vari argomenti che è possibile utilizzare WP_Query e come li si codifica.

WP_Query ha un gran numero di argomenti possibili, il che lo rende estremamente flessibile. Come puoi usarlo per interrogare praticamente qualsiasi cosa contenuta nel tuo wp_posts tabella, ha argomenti per ogni permutazione di query che potresti voler eseguire sul tuo contenuto.

In questo tutorial vedrò gli argomenti per interrogare i termini della tassonomia.

Un riassunto su come gli argomenti funzionano in WP_Query

Prima di iniziare, facciamo un rapido riassunto su come funzionano gli argomenti WP_Query. Quando si codifica WP_Query nei temi o nei plugin, è necessario includere quattro elementi principali:

  • gli argomenti per la query, usando i parametri che saranno trattati in questo tutorial
  • la query stessa
  • il cappio
  • terminando: chiusura Se e mentre tag e resettare i dati del post

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 (); ?>

Gli argomenti sono ciò che dice a WordPress quali dati recuperare dal database e sono quelli che coprirò qui. Quindi tutto ciò su cui ci stiamo concentrando qui è la prima parte del codice:

$ args = array (// Argomenti per la tua query.);

Come puoi vedere, gli argomenti sono contenuti in un array. Imparerai come codificarli mentre lavori attraverso questo tutorial.

Coding Your Arguments

Esiste un modo specifico per codificare gli argomenti nell'array, che è il seguente:

$ args = array ('parameter1' => 'value', 'parameter2' => 'value', 'parameter3' => 'value');

È necessario includere i parametri e i relativi valori tra virgolette singole, utilizzare => tra di loro e separarli con una virgola. Se si sbaglia, WordPress potrebbe non aggiungere tutti i tuoi argomenti alla query o si potrebbe ottenere una schermata bianca.

I parametri di tassonomia

L'impostazione dei parametri per i termini di tassonomia è un po 'più complicata rispetto a categorie e tag da quando si utilizza tax_query. All'interno di questo argomento si scrive una matrice nidificata di argomenti per specificare la tassonomia e il termine utilizzando questi parametri:

  • tassonomia (stringa): Tassonomia.
  • campo (stringa): Seleziona il termine tassonomia per ('term_id (predefinito), 'nome' o 'Lumaca').
  • condizioni (int / stringa / array): Termine (i) di tassonomia.
  • include_children (booleano): Indicare se includere o meno i bambini per le tassonomie gerarchiche. Il valore predefinito è true.
  • operatore (stringa): Operatore da testare. I valori possibili sono 'NEL' (predefinito), 'NON IN', 'E'.

Il fatto che tu abbia il operatore parametro significa che non è necessario scegliere tra una gamma di argomenti disponibili per definire se si stanno includendo o escludendo termini (come si fa per tag e categorie), ma si usa tax_query per tutto ciò che riguarda la tassonomia.

Se si desidera eseguire una query per più tassonomie, è possibile utilizzare anche il relazione parametro prima di tutti i tuoi array (uno per ogni tassonomia) con E o O per specificare se si desidera trovare i post con tutti i termini o nessuno di essi.

Questo è più facilmente spiegato con alcuni esempi.

Interrogazione per un termine di tassonomia

Questo è lo scenario più semplice e comporta solo l'uso di un array nidificato:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'field' => 'slug', 'terms' => 'my-term-slug',)))) ;

Le domande di cui sopra per i post con il my-termine-lumaca termine nel my-tassonomia tassonomia. Nota che devi anche usare il campo parametro per identificare il campo che stai utilizzando per identificare il termine, a meno che tu non stia usando il termine ID che è l'impostazione predefinita. Se volessi usare il termine ID, userai qualcosa del genere:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => '11')));

L'uso dell'ID rende più difficile per te identificare la query che stai cercando in un secondo momento, ma evita qualsiasi potenziale problema se pensi che i tuoi utenti possano modificare il termine slugs.

Interrogazione per più termini in una tassonomia

Se si desidera identificare i post con uno o più di una matrice di termini nella stessa tassonomia, si scrive ancora una matrice nidificata, ma si aggiunge una serie di termini.

Ad esempio, per interrogare i post con qualunque di un elenco di ID di termine dalla tua tassonomia, si utilizza:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => array ('11', '12'))));

Ma cosa succede se si desidera interrogare i post con tutti di questi termini? Dovrai usare il operatore parametro all'interno dell'array nidificato:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => array ('11', '12'), 'operator' => 'AND') ));

Si noti che il primo esempio utilizza effettivamente il NEL operatore per trovare i post con uno qualsiasi dei termini, ma poiché questo è il valore predefinito non è necessario specificarlo nei tuoi argomenti.

Un altro scenario è se si desidera eseguire una query per i post che non dispongono di una serie di termini in una tassonomia, operazione che si effettua in questo modo:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => array ('11', '12'), 'operator' => 'NOT IN' )));

Qui ho sostituito il E operatore con NON IN, il che significa che WordPress troverà i messaggi senza nessuno dei termini nella matrice.

Si noti che se si preferisce utilizzare le lumache anziché gli ID dei termini, è possibile farlo con uno di questi scenari. L'ultimo esempio sarebbe simile a questo:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'field' => 'slug', 'terms' => array ('my-slug', 'tuo- slug '),' operator '=>' NOT IN ')));

Un altro scenario è se si desidera eseguire una query per i post che hanno un termine ma non un altro. Questo usa il NEL operatore (che non è necessario includere come impostazione predefinita), con un segno meno prima dell'ID di qualsiasi termine che si desidera escludere:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => array ('11', '-12'))));

Questa domanda invia messaggi con il termine 11 ma non con il termine 12.

Interrogare i termini da più tassonomie

Se vuoi lavorare con più di una tassonomia, dovrai creare più di un array. Diamo un'occhiata all'esempio più semplice, per interrogare i post con un termine da taxonomy1 e un termine da taxonomy2:

$ args = array ('tax_query' => array ('relation' => 'AND', array ('taxonomy' => 'taxonomy1', 'field' => 'slug', 'terms' => array ('slug -one ')), array (' taxonomy '=>' taxonomy2 ',' field '=>' slug ',' terms '=> array (' slug-two '))));

Qui ho scritto due array annidati: uno per ogni tassonomia, usando gli stessi argomenti che ho usato per gli esempi usando una sola tassonomia. Ho preceduto questi con il relazione discussione. Devi includere il relazione argomento per dire a WordPress se sta cercando tutti o alcuni dei messaggi in uscita da ciascun array. Questo funziona come segue:

  • Se usi 'relazione' => 'E', WordPress recupererà i post specificati nel primo array e il secondo array. Quindi nell'esempio sopra, solo i post con tutti e due il slug-one lumaca dentro taxonomy1 e il slug-two lumaca dentro taxonomy2 sarà interrogato.
  • Se usi 'relazione' => 'O', WordPress recupera i messaggi in uscita dal primo array o il secondo array. Quindi in questo caso riceverai messaggi con o il slug-one lumaca o il slug-two lumaca (o entrambi).

Questo è il codice che useresti se stavi cercando messaggi con uno dei due slug:

$ args = array ('tax_query' => array ('relation' => 'OR', array ('taxonomy' => 'taxonomy1', 'field' => 'slug', 'terms' => array ('slug -one ')), array (' taxonomy '=>' taxonomy2 ',' field '=>' slug ',' terms '=> array (' slug-two '))));

Puoi anche cercare più di un termine in una determinata tassonomia aggiungendolo all'array:

$ args = array ('tax_query' => array ('relation' => 'OR', array ('taxonomy' => 'taxonomy1', 'field' => 'slug', 'terms' => array ('slug -one ')), array (' taxonomy '=>' taxonomy2 ',' field '=>' slug ',' terms '=> array (' slug-two ',' slug-three ')))));

Combinando il relazione argomento con query annidate anche utilizzando il operatore argomento, è possibile creare query abbastanza complesse. Gli argomenti seguenti interrogheranno i post con un termine da una tassonomia ma senza un termine da un'altra tassonomia:

$ args = array ('tax_query' => array ('relation' => 'AND', array ('taxonomy' => 'taxonomy1', 'field' => 'slug', 'terms' => array ('slug -one '),' operator '=>' NOT IN '), array (' taxonomy '=>' taxonomy2 ',' field '=>' slug ',' terms '=> array (' slug-two '))) ));

Nota che ho usato 'relazione' => 'E' qui: se l'avessi usato O, interrogherebbe i messaggi con slug-two e post senza slug-one, piuttosto che i post che hanno slug-two ma no slug-one, che è quello che sto cercando. 

Potresti, in teoria, prenderlo ulteriormente per interrogare i termini delle tue tassonomie come volevi: usare il operatore argomento in entrambe le query annidate o aggiunta di una query nidificata aggiuntiva per interrogare i termini in un'altra tassonomia.

Una nota sull'argomento fiscale

Forse ti starai chiedendo perché non ho incluso il imposta argomento, dove scrivi semplicemente il tuo argomento come segue:

$ args = array ('taxonomy1' => 'slug-one');

Potresti avere familiarità con questo modo di interrogare le tassonomie se lo hai fatto in passato, ma ora è deprecato e non dovresti usarlo. Quindi attenersi 'Tax_query'! utilizzando tax_query ti dà molta più flessibilità comunque.

Sommario

La ricerca delle tassonomie è un po 'più complicata delle categorie e dei tag, in quanto è necessario fare i conti con tax_query discussione.

Tuttavia, come abbiamo visto, questo è un argomento molto potente che ti dà un sacco di possibilità e flessibilità per interrogare il tuo database nel modo che desideri.