WP_Query Argumente Taxonomii

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.

O recapitulare a modului în care argumentele funcționează în WP_Query

Î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:

  • argumentele pentru interogare, utilizând parametrii care vor fi abordați în acest tutorial
  • interogarea însăși
  • bucla
  • finisare: închidere 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.

Codificarea argumentelor dvs.

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.

Parametrii de taxonomie

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.

Cererea pentru un termen de taxonomie

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".

Interogarea pentru mai mulți termeni într-o singură taxonomie

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.

Solicitarea termenilor din mai multe taxonomii

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ă:

  • Dacă utilizați '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.
  • Dacă utilizați '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.

O notă privind argumentul fiscal

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.

rezumat

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.

Cod