WP_Query Argumente Câmpuri personalizate

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.

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

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 câmpului particularizat

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 pentru interogările de câmp personalizate simple

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.

Folosind argumentul meta_compare

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.

Întrebări de câmp personalizate înnoite

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.

rezumat

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.

Cod