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.
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:
Se
e mentre
tag e resettare i dati del postIn 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.
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.
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.
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.
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.
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:
'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.'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.
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.
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.