Până acum, în această serie, ați învățat cum WP_Query
este structurat și care sunt proprietățile și metodele sale. Acum ne uităm la diferitele argumente pe care le puteți folosi WP_Query
și cum le codificați.
WP_Query
are un număr mare de argumente posibile, ceea ce îl face extrem de flexibil. Așa cum îl puteți folosi pentru a interoga doar despre ceva deținut în dvs. wp_posts
tabel, are argumente pentru fiecare permutare a interogării pe care ați putea dori să o difuzați pe conținutul dvs..
În acest tutorial voi examina argumentele pentru interogarea termenilor de taxonomie.
Înainte de a începe, hai să facem o recapitulare rapidă a modului în care lucrează argumentele WP_Query
. Când codificați WP_Query
în temele sau pluginurile dvs., trebuie să includeți patru elemente principale:
dacă
și in timp ce
tag-uri și resetarea datelor postaleÎn practică, acest lucru va arăta mai degrabă după cum urmează:
have_posts ()) // Începeți cu buclă peste rezultatele interogării. în timp ce ($ query-> have_posts ()) $ query-> the_post (); // Conținutul rezultatelor mesajelor interogate merge aici. // Restaurați datele postale originale. wp_reset_postdata (); ?>
Argumentele sunt ceea ce spune WordPress ce date să aducă din baza de date și sunt cele pe care le voi acoperi aici. Deci, tot ce ne concentrăm aici este prima parte a codului:
$ args = array (// Argumente pentru interogarea dvs.);
După cum puteți vedea, argumentele sunt conținute într-o matrice. Veți învăța cum să le codificați pe măsură ce lucrați prin acest tutorial.
Există o modalitate specifică de a codifica argumentele în matrice, care este după cum urmează:
$ args = array ('parameter1' => 'valoare', 'parameter2' => 'valoare', 'parameter3' => 'valoare');
Trebuie să închideți parametrii și valorile lor în ghilimele simple, utilizați =>
între ele, și le separați cu o virgulă. Dacă obțineți acest lucru greșit, WordPress nu poate adăuga toate argumentele dvs. la interogare sau puteți obține un ecran alb.
Setarea parametrilor pentru termenii de taxonomie este puțin mai complicată decât pentru categorii și etichete de când utilizați tax_query
. În cadrul acestui argument scrieți o serie de argumente imbricate pentru a specifica taxonomia și termenul utilizând acești parametri:
taxonomie
(şir): Taxonomie.camp
(şir): Selectați termenul de taxonomie cu („term_id
(Mod implicit), 'Nume'
sau 'melc'
).termeni
(int / string / array): Termenul (termenele) de taxonomie.include_children
(boolean): Să includă sau nu copii pentru taxonomii ierarhice. Valori implicite la adevărat.operator
(şir): Operatorul de testat. Valorile posibile sunt 'ÎN'
(Mod implicit), 'NU ÎN'
, 'ȘI'
.Faptul că aveți operator
parametru înseamnă că nu este nevoie să alegeți una din mai multe argumente disponibile pentru a defini dacă includeți sau excludeți termeni (cum faceți pentru etichete și categorii), dar utilizați tax_query
pentru tot ceea ce se referă la taxonomie.
Dacă doriți să căutați taxonomii multiple, puteți utiliza și relație
înainte de toate matricele dvs. (câte unul pentru fiecare taxonomie) cu ȘI
sau SAU
pentru a specifica dacă doriți să găsiți postări cu toți termenii sau oricare dintre acestea.
Acest lucru este foarte ușor de explicat prin câteva exemple.
Acesta este cel mai simplu scenariu și implică utilizarea unei singure matrice imbricate:
$ args = array ('tax_query' => array ('taxonomy' => 'my-taxonomy', 'field' => 'slug', 'terms' ;
Interogările de mai sus pentru postări cu mi-termen-Slug
termen lung în mi-taxonomie
taxonomie. Rețineți că trebuie să utilizați și camp
pentru a identifica câmpul pe care îl utilizați pentru a identifica termenul, cu excepția cazului în care utilizați codul de termen care este implicit. Dacă doriți să utilizați termenul de identificare pe care îl utilizați,
$ args = array ('tax_query' => array (array ('taxonomy' => 'meu-taxonomie', 'terms' => '11')));
Utilizarea codului de identificare vă face mai greu să identificați ceea ce caută interogarea dvs. la o dată ulterioară, dar evită orice probleme potențiale dacă credeți că utilizatorii dvs. ar putea modifica termenul "slugs".
Dacă doriți să identificați postări cu unul sau mai mulți termeni dintr-o serie de termeni în aceeași taxonomie, scrieți încă o matrice imbricată, dar adăugați o serie de termeni.
De exemplu, pentru a interoga postările cu orice a unei liste de ID-uri de termeni din taxonomia dvs., utilizați:
$ args = array ('tax_query' => array (array ('taxonomy' => 'meu-taxonomie', 'terms' => array ('11', '12'))));
Dar dacă dorești să interoghezi postări cu toate din acești termeni? Va trebui să utilizați operator
parametru în matricea dvs. imbricate:
$ args = array ('tax_query' => array ('taxonomy' => my-taxonomy ',' terms '=> array (' 11 ',' 12 ') ));
Rețineți că primul exemplu utilizează de fapt ÎN
operator pentru a găsi postări cu oricare dintre termeni, dar deoarece acesta este setarea implicită, nu trebuie să îl specificați în argumentele dvs..
Un alt scenariu este dacă doriți să căutați postări care nu conțin niciun fel de termeni într-o singură taxonomie, care vă place acest lucru:
$ arge = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy' )));
Aici l-am înlocuit ȘI
operatorul cu NU ÎN
, ceea ce înseamnă că WordPress va găsi postări fără niciunul din termenii din matrice.
Rețineți că dacă preferați să utilizați coduri de ton în loc de coduri de termen, puteți face acest lucru cu oricare dintre aceste scenarii. Ultimul exemplu ar arăta astfel:
$ args = array ('tax_query' => array ('taxonomy' => 'my- taxonomy', 'field' => 'slug' slug '),' operator '=>' NOT IN ')));
Un alt scenariu este dacă doriți să căutați postări care au un termen, dar nu altul. Aceasta utilizează ÎN
operator (pe care nu trebuie să îl includeți ca fiind implicit), cu un semn minus înainte de identificarea oricărui termen pe care doriți să-l excludeți:
$ args = array ('tax_query' => array (array ('taxonomy' => 'meu-taxonomie', 'terms' => array ('11', '-12'))));
Mesajele cu interogări cu termenul 11, dar nu cu termenul 12.
Dacă doriți să lucrați cu mai multe taxonomii, va trebui să creați mai mult de un singur matrice. Să aruncăm o privire la cel mai simplu exemplu, să interogăm posturile cu un termen din taxonomie1 și un termen din taxonomie2:
$ args = array ('tax_query' => array ('relație' => 'AND', array ('taxonomy' => 'taxonomy1', 'field' => -one ')), array (' taxonomie '=>' taxonomie2 ',' field '=>' slug ',' terms '=> array (' slug-two ')));
Aici am scris două matrice imbricate: una pentru fiecare taxonomie, folosind aceleași argumente ca și mine pentru exemple folosind doar o singură taxonomie. Am precedat acestea cu relație
argument. Trebuie să includeți relație
argument pentru a spune WordPress dacă este în căutarea pentru toate sau unele dintre mesajele de ieșire de fiecare matrice. Aceasta funcționează după cum urmează:
'relație' => 'AND'
, WordPress va prelua posturile specificate în primul tablou și a doua matrice. Astfel, în exemplul de mai sus, doar postările cu ambii slug-one
înăuntru taxonomy1
si slug-doi
înăuntru taxonomy2
va fi interogat.'relație' => 'OR'
, WordPress va prelua mesajele de ieșire de către primul matrice sau a doua matrice. Deci, în acest caz veți primi mesaje cu fie slug-one
orb sau de slug-doi
slug (sau ambele).Acesta este codul pe care l-ați utiliza dacă căutați mesaje cu oricare dintre cele două melci:
$ args = array ('tax_query' => array ('relație' => 'OR', array ('taxonomy' => 'taxonomy1', 'field' => -one ')), array (' taxonomie '=>' taxonomie2 ',' field '=>' slug ',' terms '=> array (' slug-two ')));
De asemenea, puteți căuta mai mult de un termen într-o taxonomie dată adăugând-o la matrice:
$ args = array ('tax_query' => array ('relație' => 'OR', array ('taxonomy' => 'taxonomy1', 'field' => -one ')), array (' taxonomie '=>' taxonomie2 ',' field '=>' slug ',' terms '=> array (' slug-two ',' slug-three ')));
Prin combinarea relație
argument cu interogări imbricate, de asemenea, folosind operator
argument, puteți crea interogări destul de complexe. Argumentele de mai jos vor interoga postări cu un termen dintr-o taxonomie, dar fără un termen dintr-o altă taxonomie:
$ args = array ('tax_query' => array ('relație' => 'AND', array ('taxonomy' => 'taxonomy1', 'field' => -one '),' operator '=>' NOT IN '), array (' taxonomy '=>' taxonomy2 ',' field '=> ));
Rețineți că am folosit 'relație' => 'AND'
aici: dacă am folosit SAU
, ar fi interogat postările cu slug-doi
și postări fără slug-one
, mai degrabă decât posturile care au slug-doi
dar nu slug-one
, care este ceea ce caut.
Ați putea lua acest lucru în continuare pentru a interoga termenii dvs. de taxonomii cu toate acestea ați vrut: folosind operator
argument în ambele interogări imbricate sau adăugarea unei interogări suplimentare imbricate pentru interogarea termenilor dintr-o altă taxonomie.
S-ar putea să te întrebi de ce nu am inclus impozit
argument, unde pur și simplu scrieți argumentul dvs. după cum urmează:
$ args = array ('taxonomy1' => 'slug-one');
Este posibil să fiți familiarizat cu acest mod de interogare a taxonomiilor dacă ați făcut-o în trecut, dar este acum depreciat și nu trebuie să-l utilizați. Stai așa 'Tax_query'
! Utilizarea tax_query
vă oferă o flexibilitate mult mai mare.
Interogarea taxonomiilor este un pic mai complicată decât categoriile și etichetele, pentru că trebuie să te confrunți cu tax_query
argument.
Cu toate acestea, după cum am văzut, acesta este un argument foarte puternic care vă oferă o mulțime de sferă și flexibilitate pentru a interoga baza de date în orice fel doriți.