Dacă ați urmat această serie, veți avea o înțelegere a modului WP_Query
este structurat și cum îl folosiți pentru a scrie interogări personalizate. Pentru a putea defini ce WP_Query
preluate din baza de date, trebuie să știți ce argumente puteți utiliza pentru interogarea datelor.
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 câmpurile personalizate. Dar mai întâi, o recapitulare rapidă a modului în care codificați argumentele 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:
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 spun WordPress ce date sunt preluate 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.
Câmpurile personalizate, cunoscute și sub denumirea de metadate postate, pot utiliza o clasă separată numită WP_Meta_Query
. Aceasta înseamnă că, dacă doriți să executați o interogare doar pentru metadatele postate, puteți utiliza oricare dintre acestea WP_Meta_Query
sau WP_Query
(care accesează WP_Meta_Query
), în timp ce dacă doriți să căutați metadate postate și alte elemente, cum ar fi tipul de post, pe care îl utilizați WP_Query
.
WP_Meta_Query
clasa este acoperită în detaliu în altă parte a acestei serii, așa că nu voi intra în detaliu pe aici, ci principala diferență între folosirea acestui și WP_Query
este asta WP_Query
vă permite să creați câteva argumente simple fără a utiliza matricea imbricată.
Parametrii principali pentru utilizare WP_Query
pentru a interoga câmpurile personalizate sunt după cum urmează:
meta_key
(şir): Cheia de câmp personalizată.meta_value
(şir): Valoarea câmpului personalizat.meta_value_num
(număr): Valoarea câmpului personalizat.meta_compare
(şir): Operatorul pentru a testa 'Meta_value'
. Valorile posibile sunt '='
, '! ='
, '>'
, '> ='
, '<'
, '<='
, 'CA'
, 'NU CA'
, 'ÎN'
, 'NU ÎN'
, 'ÎNTRE'
, "NU DINTRE"
, 'NU EXISTA'
, 'Regexp'
, "NU REGEXP"
sau 'RLIKE'
. Valoarea implicită este '='
.Utilizați acești parametri pentru o interogare simplă a câmpului personalizat. De exemplu, pentru a afișa postări care au un câmp particularizat cu cheia key1
(indiferent de valoarea sa), folosiți acest argument:
$ args = array ('meta_key' => 'cheie1');
Aceasta va returna toate postările cu un câmp particularizat cu key1
cheie, indiferent de valoare.
Dacă doriți să specificați o valoare, adăugați un argument suplimentar pentru aceasta:
$ args = array ('meta_key' => 'cheie1', 'meta_value' => 'value1');
Aceasta va returna toate postările cu un câmp particularizat cu key1
cheie și valoare1
pentru aceasta.
Alternativ, puteți prelua toate postările cu un câmp particularizat cu valoarea valoare1
, indiferent de cheie. Acest lucru ar putea fi util atunci când aveți mai multe chei de câmp personalizate cu valori duplicate:
$ args = array ('meta_value' => 'valoare1');
După cum puteți vedea, puteți interoga doar cheia sau valoarea câmpului personalizat - nu trebuie să specificați întotdeauna ambele.
Este posibil să fi observat mai sus că există mulți parametri potențiali pentru meta_compare
argument și utilizarea lor nu poate fi întotdeauna evidentă. Să aruncăm o privire la cele pe care le-ați putea folosi cel mai mult:
=
: Egal. Acesta este setarea implicită, deci dacă nu includeți a meta_compare
argument, aceasta este ceea ce WP_Query va folosi.!+
: Nu este egal cu.>
: Mai mare ca.> =
: Mai mare sau egal cu.<
: Mai puțin decât.<=
: Mai mic sau egal cu.CA
: Aceasta va ignora cazul valorii pe care o utilizați și o puteți folosi și cu caractere cu metacaractere pentru a găsi valori precum valoarea pe care o căutați.NU CA
: Lucrează într-un mod similar LIKE, dar întreabă contrariul!ÎN
: Utilizați acest lucru cu o matrice în argumentul "valoare" pentru a găsi postări cu una sau mai multe dintre valorile din matrice.ÎNTRE
: Utilizați cu o matrice de două valori numerice (specificate în meta_value
argument) pentru a găsi postări cu o valoare a câmpului personalizat între aceste valori (dar nu egale cu acestea).Nu intre
: Interoghează mesaje cu valori ale câmpului personalizat în afara unei serii de două valori numerice specificate de meta_value
argument.Să aruncăm o privire la câteva exemple de utilizare a acestui argument.
În primul rând, puteți exclude cheile de câmp personalizate sau valorile utilizând meta_compare
argument. Deci, pentru a prelua toate posturile, cu excepția celor cu un câmp particularizat cu key1
cheia, ați folosi acest lucru:
$ args = array ('meta_key' => 'cheie1', 'meta_compare' => '! =');
Ați putea folosi și 'NU ÎN'
valoare pentru meta_compare
argument, care poate fi folosit și cu un șir de valori multiple:
$ args = array ('meta_key' => 'cheie1, cheie2', 'meta_compare' => 'NOT IN');
Acest lucru ar interoga postări care nu au câmpuri personalizate cu key1
sau key2
valori. Dacă vrei să fii mai specific, poate că ai interogat postările cu un singur câmp personalizat și nu cu altul, folosești o matrice imbricată, pe care o vom ajunge în curând.
Exemplele de mai sus utilizează valori non-numerice. Poți să folosești WP_Query
cu câmpuri personalizate care au valori numerice, nu numai pentru a prelua postările cu un câmp particularizat cu acea valoare, dar și pentru a le aduce pe cele cu câmpuri personalizate cu valori mai mari sau mai mici. Ați putea folosi acest lucru într-un magazin, de exemplu, dacă căutați elemente deasupra sau sub un anumit preț.
Pentru a găsi postări cu o valoare a câmpului personalizat deasupra unui număr dat, utilizați ceva similar:
$ args = array ('meta_key' => 'numkey', 'meta_value' => '100', 'meta_compare' => '>');
Aceasta va returna toate postările cu un câmp particularizat cu numkey
cheie și o valoare de peste 100
. Dacă doriți să căutați valori de 100 sau mai mult, le-ați folosi 'meta_compare' => '> ='
.
De asemenea, puteți găsi postări ale căror câmpuri personalizate au valori între două numere pe care le specificați utilizând ÎNTRE
argument și o matrice:
$ args = array ('meta_key' => 'numkey', 'meta_value' => array ('100', '200'), 'meta_compare' => 'BETWEEN');
Acest lucru ar găsi toate posturile cu o valoare în numkey
câmpuri personalizate între 100 și 200.
Dacă doriți să căutați mai multe câmpuri personalizate sau să folosiți mai mulți operatori, puteți utiliza o matrice imbricată.
Acestea au următoarea structură:
$ args = array ('meta_query' => array ('relația' => ", // Argumentul opțional array (// 'meta_query' argumentele intră aici.)));
Modul în care structurați 'Meta_query'
argument în WP_Query
este exact același lucru cu modul în care o faci folosind WP_Meta_Query
clasa, care este acoperit într-un tutorial mai târziu în această serie, așa că nu voi dubla asta aici.
Din WordPress versiunea 4.1 puteți utiliza, de asemenea, mai multe niveluri de matrice imbricate pentru a crea interogări tot mai complexe și mai precise. Acestea arata cam asa:
$ args = array ('meta_query' => array ('relația' => ', // array opțional (' relația '=> "array (// primul set de argumente" meta_query " (// Al doilea set de argumente "meta_query" merge aici.))));
Acest lucru vă permite să utilizați diferite interacțiuni la diferite niveluri în interogarea dvs., de exemplu, interogarea postărilor cu o valoare într-o singură cheie de câmp personalizat sau cu ambele două valori într-o altă cheie de câmp particularizat. Acest lucru este acoperit în detaliu, cu exemple, în tutorialul pe WP_Meta_Query
clasa, care face parte din această serie.
Utilizarea WP_Query
clasa pentru a interoga metadatele postărilor dvs. (sau câmpurile personalizate) vă oferă o mulțime de flexibilitate, cu mai multe argumente potențiale combinate cu un număr de operatori pentru a vă ajuta să interogați baza de date exact așa cum doriți.
Dacă doriți doar să utilizați argumentele metadatelor postare în interogarea dvs. (și nu combinați-le cu alte argumente, de exemplu pentru tipurile de postare), puteți utiliza și WP_Meta_Query
clasa, care este acoperită mai târziu în această serie.