Argumente WP_Query: stare, ordine și paginare. Creați o instanță a clasei și interogări pentru mesaje. # 2 Afișează o postare aleatorie

Dacă ați urmărit seria noastră de articole, probabil că știți deja cum funcționează clasa WP_Query și cum o puteți utiliza pentru a vă crea propriile interogări. Pentru a determina ce date doriți să extrageți din baza de date, trebuie să vă familiarizați cu argumentele acestei clase și să învățați cum să le utilizați corect.

Astăzi ne vom familiariza cu argumentele câmpurilor personalizate ( câmpuri customizate), dar mai întâi să ne amintim cum să folosim argumentele în WP_Query.

Să ne amintim cum funcționează argumentele în WP_Query

Când utilizați WP_Query în teme sau pluginuri, există patru elemente principale pe care trebuie să le includeți în cod:

  • Argumente pentru o cerere care utilizează parametri;
  • Cererea în sine;
  • Ciclu;
  • Etapa finală: resetarea datelor de înregistrare.

În practică arată astfel:

have_posts()) ( // începerea ciclului de procesare a datelor din rezultatele interogării în timp ce ($query->have_posts()) ( $query->the_post(); // conținutul postării interogate) ) // restaurarea originalului post date wp_reset_postdata(); ?>

Argumentele îi spun WordPress ce date să preia din baza de date:

$args = array(// Argumente pentru cererea ta);

După cum puteți vedea, argumentele sunt incluse într-o matrice.

Crearea codului pentru argumente

Există mod special setarea argumentelor într-o matrice:

$args = array("parametrul1" => "valoare", "parametrul2" => "valoare", "parametrul3" => "valoare");

Este necesar să includeți parametrii și valorile acestora în ghilimele simple, și, de asemenea, utilizați => între ele. Fiecare argument este separat prin virgulă. Dacă faceți ceva greșit aici, este posibil ca WordPress să nu interogheze toate argumentele pe care le specificați și nimic nu va fi afișat pe ecran.

Opțiuni de câmp personalizat

Câmpuri customizate ( cunoscut și sub numele de metadate post) poate folosi o clasă separată WP_Meta_Query. Prin urmare, pentru a obține metadatele postării, puteți utiliza fie WP_Meta_Query, fie WP_Query ( care încă accesează WP_Meta_Query). Dar dacă trebuie să interogați metadate și alte elemente ( ca tipul de postare), atunci ar trebui utilizat numai WP_Query.

Principala diferență în utilizarea acestei clase și a WP_Query este că WP_Query vă permite să creați argumente simple fără a fi nevoie să utilizați tablouri imbricate.

Opțiuni pentru o solicitare simplă de câmp personalizat

Parametrii de bază WP_Query pentru executarea de interogări pe câmpuri personalizate:

  • meta_key( şir): cheie de câmp personalizat;
  • meta_valoare( şir
  • meta_value_num( număr): valoarea câmpului personalizat;
  • meta_compare( şir): operator pentru testare " meta_valoare". Valori valide: "=", "!=", ">", ">=", "<", "<=", "LIKE", "NOT LIKE", "IN", "NOT IN", "BETWEEN", "NOT BETWEEN", "NOT EXISTS", "REGEXP", "NOT REGEXP" или "RLIKE". Значение по умолчанию: "=".

Utilizați aceste opțiuni pentru a crea interogări simple împotriva câmpurilor personalizate. De exemplu, pentru a afișa înregistrări care conțin câmpuri personalizate cu cheia key1 ( indiferent de sensul ei), trebuie să utilizați următorul argument:

$args = array("meta_key" => "key1");

Acest argument va primi toate înregistrările cu un câmp personalizat cu key1 , indiferent de valoare. Pentru a atribui o anumită valoare, trebuie să adăugați un argument suplimentar:

$args = array("meta_key" => "key1", "meta_value" => "value1");

Acest argument va afișa toate înregistrările cu un câmp personalizat care are o cheie1 cu o valoare de valoare1.

De asemenea, puteți prelua toate înregistrările cu un câmp personalizat a cărui valoare va fi value1 , indiferent de cheie. Acest lucru este necesar atunci când sunt utilizate mai multe chei de câmp personalizat cu valori duplicate:

$args = array("meta_value" => "value1");

După cum puteți vedea, puteți direcționa o interogare către un câmp arbitrar prin cheie sau după valoare și nu este deloc necesar să specificați ambele argumente de fiecare dată.

Folosim argumentul meta_compare

Poate ați observat că există multe opțiuni pentru argumentul meta_compare. Să ne uităm la cele care sunt folosite cel mai des:

  • =: Egal. Aceasta este setarea implicită. Adică, dacă nu utilizați argumentul meta_compare, WP_Query îl va folosi;
  • !+: Nu este egal;
  • >: Mai mult de;
  • >=: Mai mare sau egal cu;
  • LIKE: Această opțiune ignoră cazul în care introduceți valoarea. Aici puteți folosi chiar și caractere speciale pentru a căuta valori;
  • NOT LIKE: Funcționează pe același principiu ca LIKE, dar este complet opus;
  • IN: Utilizați această opțiune cu o matrice ca argument „valoare” pentru a căuta intrări cu una sau mai multe valori în matrice;
  • BETWEEN: Folosit cu o matrice de două valori numerice (specificate în argumentul meta_value) pentru a găsi înregistrări cu o valoare de câmp personalizat care este între (dar nu egală cu) acele două valori;
  • NOT BETWEEN: Interogări pentru înregistrări cu o valoare de câmp personalizat care se află în afara intervalului specificat de două valori numerice în meta_value.

Folosind argumentul meta_compare, puteți exclude cheile sau valorile unui câmp personalizat. Pentru a prelua toate înregistrările, cu excepția celor a căror valoare cheie folosește key1 , veți folosi următorul cod:

$args = array("meta_key" => "key1", "meta_compare" => "!=");

Puteți folosi valoarea „NOT IN” în argumentul meta_compare, care poate fi folosit și cu un șir de valori multiple:

$args = array("meta_key" => "key1, key2", "meta_compare" => "NU IN");

Acest cod interogează înregistrările care nu au câmpuri personalizate cu valori cheie1 sau cheie2. Dacă trebuie să căutați înregistrări cu un anumit câmp personalizat, dar nu cu altul, puteți utiliza o matrice imbricată, despre care vă voi spune mai târziu.

Exemplele de mai sus folosesc valori non-numerice. Puteți utiliza WP_Query cu câmpuri personalizate care au valori numerice, nu numai pentru a prelua postările cu acele valori, ci și pentru a interoga postările care au o valoare a câmpului personalizat mai mare sau mai mică decât acele valori. De exemplu, acest lucru poate fi util într-un magazin online atunci când trebuie să căutați produse mai ieftine sau mai scumpe decât costul specificat.

Pentru a găsi înregistrări cu o valoare de câmp personalizat mai mare decât un anumit număr, trebuie să utilizați următorul cod:

$args = array("meta_key" => "numkey", "meta_value" => "100", "meta_compare" => ">");

Această interogare va returna toate înregistrările a căror valoare de câmp personalizat este mai mare de 100. Dacă trebuie să solicitați înregistrări cu valori de 100 și mai mari, puteți utiliza parametrul „meta_compare” => „>=".

De asemenea, puteți utiliza argumentul BETWEEN și o matrice pentru a găsi înregistrări ale căror câmpuri personalizate folosesc valori într-un anumit interval:

$args = array("meta_key" => "numkey", "meta_value" => array ("100", "200"), "meta_compare" => "BETWEEN");

O astfel de interogare vă va permite să găsiți toate înregistrările cu valori de câmp personalizate între 100 și 200.

Interogări pentru câmpurile personalizate imbricate

Dacă trebuie să rulați o interogare pe mai multe câmpuri personalizate sau să folosiți mai mult de un operator, puteți utiliza o matrice imbricată.

Structura cererii va fi următoarea:

$args = array("meta_query" => array("relation" => "", // Argument opțional. array(// argumentele `meta_query` vor fi aici.)));

Structura argumentului „meta_query” din clasa WP_Query va fi aceeași ca și atunci când se utilizează clasa WP_Meta_Query, despre care vom vorbi în detaliu în articolele următoare.

Odată cu lansarea versiunii WordPress 4.1, a devenit posibilă utilizarea mai multor niveluri de matrice imbricate pentru a crea interogări și mai complexe și mai precise. Structura unor astfel de solicitări arată cam așa:

$args = array("meta_query" => array("relation" => "", // Argument opțional. array("relation" => "", matrice (// Primul set de argumente `meta_query`.), matrice ( // Al doilea set de argumente `meta_query`.))));

Această abordare vă permite să utilizați diferite relații la diferite niveluri într-o interogare. De exemplu, puteți crea o interogare pentru înregistrări cu o valoare într-un câmp personalizat și ambele valori într-un alt câmp personalizat.

În concluzie

Utilizarea clasei WP_Query pentru a crea interogări post metadate ( sau câmpuri personalizate) oferă flexibilitatea de a lucra cu multe argumente diferite în combinație cu operatori.

Dacă doriți să utilizați doar argumente post metadate în interogarea dvs. ( și nu le combina cu altele), atunci puteți folosi și clasa WP_Meta_Query, despre care vom vorbi mai târziu.

Traducerea articolului „ WP_Query Arguments: Câmpuri personalizate” a fost pregătit de echipa prietenoasă a proiectului Website Building from A to Z.

Prestashop este un motor de gestionare a magazinului online. Pe Internet puteți găsi multe module Prestashop plătite și gratuite care ajută la îmbunătățirea paginilor de produse și la creșterea numărului de conversii. În acest articol, ne vom uita la cele mai bune 5 module SEO.

În articolul de astăzi din seria noastră de explorare a clasei WP_Query, veți afla mai multe despre mai multe argumente pe care le puteți folosi cu WP_Query pentru a interoga:

  • stare;
  • Ordin;
  • paginare.

Aceste argumente pot fi folosite pentru a prelua înregistrări din baza de date, în interogări atașate, pentru a reordona și sorta înregistrările, pentru a specifica câte înregistrări să fie afișate și multe altele.

Să ne amintim cum funcționează argumentele în WP_Query

Când utilizați WP_Query în propriile teme sau pluginuri, există patru elemente principale pe care trebuie să le includeți în codul dvs.:

  • Argumente pentru o cerere care utilizează parametri;
  • Cererea în sine;
  • Ciclu;
  • Etapa finală: resetarea datelor de înregistrare.

În practică arată astfel:

have_posts()) ( // începerea ciclului de procesare a datelor din rezultatele interogării în timp ce ($query->have_posts()) ( $query->the_post(); // conținutul postării interogate) ) // restaurarea originalului post date wp_reset_postdata(); ?>

Argumentele îi spun WordPress ce date să preia din baza de date. Să ne concentrăm chiar la începutul codului:

$args = array(// Argumente pentru cererea ta);

După cum puteți vedea, argumentele sunt incluse într-o matrice.

Crearea codului pentru argumente

Există o sintaxă specifică pentru inițializarea argumentelor într-o matrice:

$args = array("parametrul1" => "valoare", "parametrul2" => "valoare", "parametrul3" => "valoare");

Ar trebui să includeți parametrii și valorile acestora între ghilimele simple și să utilizați => între ele. Argumentele sunt separate prin virgule. Dacă nu respectați sintaxa stabilită, este posibil ca WordPress să nu interogheze toate argumentele pe care le specificați și, ca urmare, nu va fi afișat nimic pe ecran.

Opțiuni de stare

După cum știți, WordPress dă fiecărei postări un statut separat. Puteți utiliza parametrul post_status pentru a interoga postările cu una sau mai multe stări.

Următoarele argumente sunt disponibile:

  • publish : postare sau pagină publicată;
  • în așteptare: intrarea este în așteptarea examinării;
  • draft : intrare în statut de draft;
  • auto-draft: postare nou creată, fără niciun conținut;
  • viitor : intrare programată;
  • privat: intrarea nu este vizibilă pentru vizitatorii care nu sunt autentificați pe site;
  • moștenire : versiunea postării modificată sau starea postărilor atașate;
  • trash : intrarea este în coșul de gunoi;
  • any : solicită orice stare, cu excepția celor cu parametrul „exclude_from_search” setat la adevărat (de exemplu, schiță automată t sau Gunoi).

Dacă nu specificați o stare în argumentele solicitării dvs., WordPress va publica implicit; daca utilizatorul este autorizat pe site, atunci cererea va lua in considerare si inregistrari cu statutul privat. Dacă rulați solicitarea ca administrator, atunci WordPress va ține cont și de stările protejate: viitor , draft și în așteptare .

Să presupunem că aveți un site de afișe care utilizează tip propriuînregistrările evenimentului, iar data la care este programat evenimentul este utilizată ca dată de publicare. În mod implicit, WordPress nu va afișa evenimente care nu au avut loc încă. În ciuda a ceea ce ați planificat, data publicării este în viitor, ceea ce înseamnă că starea postării va fi viitoare .

Pentru a rezolva această problemă, puteți utiliza următoarele argumente:

$args = array("post_type" => "eveniment", "post_status" => "viitor");

Acest cod vă va permite să afișați acele evenimente care nu au avut loc încă, deoarece starea de publicare este utilizată pentru intrările publicate. Dar dacă trebuie să afișați evenimentele care au avut loc, atunci trebuie să utilizați o matrice care conține mai multe stări:

$args = array("post_type" => "eveniment", "post_status" => array ("viitor", "publicare"));

Parametrul post_status este important la interogarea atașamentelor, deoarece starea este mostenire mai degrabă decât publicare. Pentru a căuta toate atașamentele, puteți utiliza următorul cod:

$args = array("post_type" => "atașament", "post_status" => "moștenire");

Dar puteți înlocui mostenirea cu orice alt statut care va produce un rezultat similar.

Opțiuni de sortare

Există doi parametri care pot fi utilizați pentru sortarea înregistrărilor obținute folosind WP_Query: order și orderby. După cum ați înțeles deja, ordinea determină ordinea în care înregistrările sunt afișate în buclă, iar ordinea determină după ce câmp din baza de date vor fi sortate.

parametrul de comandă

Există doar argumente pe care le puteți folosi pentru sortare:

ASC: Crescător (1, 2, 3; a, b, c).
DESC: descendent (3, 2, 1; c, b, a).

Dacă nu includeți un argument pentru comandă, WordPress va fi implicit DESC .

orderby parametru

Puteți sorta înregistrările după mai multe câmpuri:

  • none : fără condiții de sortare ( disponibil din versiunea 2.8);
  • ID: sortați după id-ul postării. Nu uitați de majuscule;
  • autor : sortare după autor;
  • title : sortare după titlu;
  • nume: sortare după intrarea slug;
  • tip : sortează după tipul postării;
  • data : sortare dupa data;
  • modificat : sortează după data ultimei modificări;
  • parent : sortați după id-ul postării/paginii părinte;
  • rand : ordine aleatorie;
  • comment_count : sortează după numărul de comentarii;
  • menu_order : sortează după ordinea paginilor. Cel mai frecvent folosit pentru pagini ( aici se folosește valoarea care este specificată în metablocul la editarea paginii), precum și pentru atașamente ( folosește numărul întreg din caseta de dialog Inserare/Încărcare suport). Poate fi folosit și pentru orice tip de postare cu menu_order activat;
  • meta_value : sortați după valoarea meta-cheie sau una personalizată;
  • câmpuri: va funcționa numai dacă parametrul meta_key este setat. Valorile meta sunt sortate mai degrabă alfabetic decât numeric ( adică 34 va fi tipărit înainte de numărul 4);
  • meta_value_num : Sortați după metavaloare numerică. Ca și în cazul meta_value , argumentul meta_key trebuie utilizat în cerere;
  • post__in : salvează sortarea după ID-urile postării setate în matricea post__in.

În mod implicit, câmpul de dată este utilizat pentru sortare. Adică este sortat după data publicării.

Dacă doriți să sortați înregistrările după titlu în ordine descrescătoare, puteți utiliza următoarele argumente:

$args = array("orderby" => "titlu", "comanda" => "ASC");

Sortare după mai multe câmpuri

Pentru a sorta înregistrările după mai multe câmpuri, trebuie să utilizați o matrice cu parametrul orderby și cu parametrul order dacă doriți ca fiecare câmp să fie sortat într-o ordine diferită.

Să presupunem că aveți un câmp personalizat numit evaluări pe care doriți să îl utilizați pentru sortare într-un magazin online. Puteți sorta după evaluare crescătoare și apoi după titlu folosind următorul cod:

$args = array("orderby" => array("meta_value_num", "title"), "order" => "ASC", "meta_key" => "evaluare");

Am inclus un argument meta_key în cerere și acesta va informa WordPress ce câmp personalizat folosim. Acest lucru este necesar tocmai pentru că WordPress stochează metadatele postărilor în tabelul wp_postmeta, și nu în wp_posts.

Dar ce se întâmplă dacă doriți să sortați după evaluare în ordine descrescătoare și apoi după titlu în ordine crescătoare? În acest caz, ar trebui să utilizați o matrice diferită:

$args = array("orderby" => array ("meta_value_num", "title"), "order" => array ("DESC", "ASC"), "meta_key" => "evaluare");

De asemenea, puteți sorta după mai multe câmpuri dacă nu doriți să utilizați metadatele postării. De exemplu, pentru a sorta postările după tip și apoi după dată, puteți folosi următorul cod:

$args = array("orderby" => array ("tip", "data"), "comanda" => array ("ASC", "DESC"));

Acest cod va sorta după tipul de postare în ordine crescătoare și apoi, în cadrul fiecărui tip de postare, după dată, în ordine descrescătoare.

Opțiuni de paginare

Trecem la un alt set de parametri, care este asociat cu afișarea conținutului pagină cu pagină, cu paginarea. Acești parametri ajută la determinarea câte înregistrări vor fi interogate și cum va avea loc paginarea.

Sunt disponibile următoarele opțiuni:

  • nepaging ( boolean): Afișează toate postările sau folosește paginarea. Valoarea implicită este 'fals', adică se utilizează ieşirea paginii;
  • posts_per_page ( int): numărul de înregistrări pe pagină;
  • posts_per_archive_page (int): numărul de înregistrări pe pagină, dar numai pe pagina de arhivă;
  • decalaj ( int): numărul de înregistrări după care începe ieşirea;
  • paginat( int): pagina din arhiva din care sunt derivate paginile;
  • pagina ( int): Numărul de pagini pentru pagina de pornire statică. Se afișează înregistrările care ar trebui să fie în Mod normal apar doar pe pagina X când pagina de pornire statică este activată ( Prima pagina);
  • ignore_sticky_posts (boolean): ignora postările atașate. Valoarea implicită este false.

Numărul de intrări și intrări ignorate

Pentru a arăta cele mai multe cinci ultimele intrări, utilizați următorul cod:

$args = array("posts_per_page" => "5");

Se afișează cele mai recente cinci intrări, excluzând cea mai recent publicată:

$args = array("posts_per_page" => "5", "offset" => "1");

Vă rugăm să rețineți că, deși recuperați înregistrări de la șase ultimele intrăriîn baza de date, încă utilizați 'posts_per_page' => '5', deoarece acesta este numărul de înregistrări care ar trebui să fie afișate.

Puteți crea două interogări: una pentru a afișa cele mai recente intrări și a doua pentru a afișa încă 10 intrări, excluzând acea intrare:

Pentru a afișa toate postările, puteți folosi posts_per_page :

$args = array("posts_per_page" => "-1");

Postari atasate

De obicei, postările fixate apar primele în orice interogare. Dacă trebuie să înlocuiți această setare, utilizați parametrul ignore_sticky_posts:

$args = array("posts_per_page" => "5", "ignore_sticky_posts" => true);

Argumentele de mai sus vor prelua ultimele cinci intrări, indiferent dacă sunt atașate sau nu.

Dacă doriți să afișați numai postările atașate, trebuie să utilizați funcția get_option() și argumentul post__in după cum urmează:

$sticky = get_option("sticky_posts"); $args = array("posts_per_page" => "5", "post__in" => $sticky);

Codul de mai sus va prelua ultimele cinci postări atașate. Dacă sunt mai puțin de cinci (de exemplu, trei), atunci va fi afișat numai numărul disponibil de înregistrări atașate.

Paginare în arhive

De asemenea, puteți utiliza opțiunile de paginare pentru a determina cum vor fi distribuite intrările preluate în mai multe pagini de arhivă sau pagini de căutare.

De exemplu, următorul cod ar putea fi folosit pe o pagină de arhivă pentru a afișa 20 de intrări pe pagină:

$args = array("posts_per_archive_page" => "20");

Notă: argumentul posts_per_archive_page înlocuiește posts_per_page .

init() Inițializați obiectul, setați toate proprietățile la null, zero sau false. parse_query($query) Preia un șir de interogare care definește cererea, îl parsează și populează toate proprietățile în afară de $posts , $post_count , $post și $current_post . parse_query_vars() Reparați vechiul șir de interogare. get($query_var) Obține o variabilă de interogare numită. set($query_var, $value) Setați o variabilă de interogare numită la o anumită valoare. &get_posts() Preluați și returnați postările solicitate din baza de date. De asemenea, populați $posts și $post_count . Notă: Acesta este apelat în timpul construcției dacă WP_Query este construit cu argumente. Este nu idempotent și nu trebuie apelat de mai multe ori pe același obiect de interogare. Acest lucru poate duce la o interogare întreruptă. next_post() (de folosit când se află în ) Avansați la următoarea postare în $posts . Incrementați $current_post și setați $post la obiectul (noul) post curent (notă: aceasta nu setează variabila globală $post, ci doar variabila de instanță a obiectului WP_Query.) Returnează obiectul post curent. (Acest lucru este depreciat, vă rugăm să utilizați „next_post_link()”) the_post() (de folosit când se află în ) Avansați la următoarea postare și setați variabila globală $post. have_posts() (pentru a fi folosit când se află în , sau chiar înainte de The Loop) Determinați dacă mai avem postări de afișat. Apelează rewind_posts() și returnează false dacă nu mai au postări. Din cauza derulării înapoi, puteți"Nu te bazezi pe have_posts() să rămână fals. Vezi . rewind_posts() Resetează $current_post și $post . &query($query) Apelează parse_query() și get_posts() . Returnează rezultatele get_posts() . get_queried_object() Setează $queried_object dacă nu este deja setat și returnați-l. get_queried_object_id() Setați $queried_object_id dacă nu este deja setat și returnați-l. WP_Query($query = "") (constructor) Dacă furnizați un șir de interogare, apelați query() cu acesta.

Parametrii

Parametrii de autor

Afișați postările asociate cu un anumit autor.

  • autor (int | şir) - utilizați ID-ul autorului sau o listă de ID-uri separate prin virgulă.
  • numele autorului (şir) - utilizați " user_nicename " - NU numele.
  • autor__în (matrice
  • autor__nu_în (matrice) - utilizați id-ul autorului (disponibil din ).

Afișați postările pentru un singur autor

Afișați postările după autor, folosind ID-ul autorului:

$interogare = new WP_Query(array("autor" => 123));

Afișează postările după autor, folosind autorul „ user_nicename ”:

$interogare = new WP_Query(array("nume_autor" => "rami"));

Afișați postările de la mai mulți autori

Afișați postări de la mai mulți autori specifici:

$interogare = new WP_Query(array("author" => "2,6,17,38"));

Excludeți postările aparținând unui autor

Afișează toate postările cu exceptia cele de la un autor(singular) prin prefixarea id-ului acestuia cu semnul „-” (minus):

$interogare = new WP_Query(array("autor" => -12));

Manipularea mai multor autori

Afișați postările de la mai mulți autori:

$interogare = new WP_Query(array("author__in" => array(2, 6)));

De asemenea, puteți exclude mai mulți autori în acest fel:

$interogare = new WP_Query(array("author__not_in" => array(2, 6)));

Parametrii categoriei

Afișați postările asociate cu anumite categorii.

  • pisică (int) - utilizați id-ul categoriei.
  • Numele categoriei (şir) - utilizați categoria slug.
  • categorie__și (matrice) - utilizați id-ul categoriei.
  • categorie__în (matrice) - utilizați id-ul categoriei.
  • categorie__nu_in (matrice) - utilizați id-ul categoriei.

Afișează postări pentru un Categorie

Afișați postările care au această categorie (și orice copii din acea categorie), folosind codul categoriei:

$interogare = new WP_Query(array("cat" => 4));

Afișați postările care au această categorie (și orice copii din acea categorie), folosind categoria slug:

$interogare = new WP_Query(array("category_name" => "staff"));

Afișați postările care au această categorie (nu copii din acea categorie), folosind codul categoriei:

$interogare = new WP_Query(array("category__in" => 4));

Afișați postările din mai multe categorii

Afișați postările care au aceste categorii, folosind ID categorie:

$interogare = new WP_Query(array("cat" => "2,6,17,38"));

Afișați postările care au aceste categorii, folosind categoria slug:

$interogare = new WP_Query(array("category_name" => "staff,news");

Afișați postările care au „toate” aceste categorii:

$query = new WP_Query(array("category_name" => "staff+news");

Excludeți postările aparținând categoriei

Afișează toate postările cu exceptia cei dintr-o categorie prefixând id-ul acesteia cu semnul „-” (minus).

$interogare = new WP_Query(array("cat" => "-12,-34,-56"));

Manipulare cu mai multe categorii

Afișați postările care sunt în mai multe categorii. Aceasta arată postările care sunt în ambele categorii 2 și 6:

$interogare = new WP_Query(array("category__and" => array(2, 6)));

Pentru a afișa postări din categoria 2 SAU 6, puteți folosi cat așa cum s-a menționat mai sus sau folosind categorie__in (rețineți că acest lucru nu afișează postări de la niciun copil din aceste categorii):

$interogare = new WP_Query(array("category__in" => array(2, 6)));

De asemenea, puteți exclude mai multe categorii în acest fel:

$interogare = new WP_Query(array("category__not_in" => array(2, 6)));

Parametrii etichetei

Afișați postările asociate cu anumite etichete.

  • etichetă (şir) - utilizați tag slug.
  • tag_id (int) - utilizați ID-ul etichetei.
  • tag__și (matrice) - utilizați ID-uri de etichetă.
  • tag_in (matrice) - utilizați ID-uri de etichetă.
  • tag__nu_in (matrice) - utilizați ID-uri de etichetă.
  • tag_slug__and (matrice) - folosiți limacși de etichetă.
  • tag_slug__in (matrice) - folosiți limacși de etichetă.

Afișați postările pentru o etichetă

Afișați postările care au această etichetă, folosind tag slug:

$query = new WP_Query(array("tag" => "cooking"));

Afișați postările care au această etichetă, folosind ID-ul etichetei:

$interogare = new WP_Query(array("tag_id" => 13));

Afișați postările de la mai multe etichete

Afișați postările care au „oricare” dintre aceste etichete:

$interogare = new WP_Query(array("tag" => "pâine, coacere"));

Notă: Dacă WP_Query determină că rezultatul va fi singular (este adevărat), va ignora parametrul tax_query. Pentru a modifica tax_query , utilizați filtrul pentru a adăuga instrucțiunile SQL necesare.

Notă importantă: tax_query ia o matrice a argumentelor de interogare fiscală matrice(este nevoie de o matrice de matrice). Acest construct vă permite să interogați mai multe taxonomii folosind relație parametrul din primul tablou (exterior) pentru a descrie relația booleană dintre tablourile de taxonomie.

Interogare simplă de taxonomie:

Afişa postări etichetat cu bob, sub oameni taxonomie personalizată:

$args = array("post_type" => "post", "tax_query" => array(array("taxonomy" => "oameni", "field" => "slug", "terms" => "bob", ),),); $interogare = new WP_Query($args);

Gestionarea taxonomiilor multiple:

Afişa postări din mai multe taxonomii personalizate:

$args = array("post_type" => "post", "tax_query" => array("relation" => "ȘI", array("taxonomie" => "movie_gen", "field" => "slug", "termeni" => matrice ("acțiune", "comedie"),), matrice ("taxonomie" => "actor", "câmp" => "term_id", "termeni" => matrice (103, 115, 206 ), „operator” => „NU ÎN”,),),); $interogare = new WP_Query($args);

Afişa postări care sunt în citate categorie SAU au citat :

$args = array("post_type" => "post", "tax_query" => array("relation" => "SAU", array("taxonomie" => "categorie", "câmp" => "slug", "termi" => matrice("ghilimele"),), matrice("taxonomie" => "format_post", "câmp" => "limc", "termeni" => matrice ("post-format-quote"), ),),); $interogare = new WP_Query($args);

Gestionarea taxonomiei imbricate:

Clauzele „tax_query” pot fi imbricate, pentru a crea interogări mai complexe. Exemplu: afișaj postări care sunt în citate categoria SAU ambele au citat post format ȘI sunt în înţelepciune categorie:

$args = array("post_type" => "post", "tax_query" => array("relation" => "SAU", array("taxonomie" => "categorie", "câmp" => "slug", "termeni" => matrice("ghilimele"),), matrice("relație" => "ȘI", matrice("taxonomie" => "format_post", "câmp" => "slug", "termeni" => array("post-format-quote"),), array ("taxonomie" => "categorie", "câmp" => "slug", "termeni" => matrice ("înțelepciune"),),),) ,); $interogare = new WP_Query($args);

Parametrul de căutare

Afișați postările pe baza unei căutări de cuvinte cheie.

  • s (şir) - Căutare cuvânt cheie.

Afișați postările pe baza unei căutări de cuvinte cheie

Afișați postările care corespund termenului de căutare „cuvânt cheie”:

$interogare = new WP_Query(array("s" => "keyword"));

Adăugarea unui termen cu o cratimă va exclude postările care se potrivesc termenului respectiv. De exemplu, „pernă -canapea” va returna postări care conțin „pernă”, dar nu „canapea” (disponibilă din ).

Parametrii postării și paginii

Afișează conținut pe baza parametrilor postării și paginii. Rețineți că post_type implicit este setat doar pentru a afișa postări, dar nu și pagini.

  • p (int) - folosește id-ul postării. Tipul implicit de postare este post.
  • Nume (şir) - utilizați post slug.
  • titlu (şir) - utilizați titlul postării (disponibil cu ).
  • page_id (int) - utilizați id-ul paginii.
  • nume de pagină (şir) - utilizați pagina slug.
  • post_parent (int) - utilizați id-ul paginii pentru a returna numai paginile secundare. Setați la 0 pentru a returna numai intrările de nivel superior.
  • post_parent__in (matrice) - utilizați ID-uri de postare. Specificați postările al căror părinte se află într-o matrice. (disponibil de când)
  • post_parent__nu_in (matrice) - utilizați ID-uri de postare. Specificați postările al căror părinte nu se află într-o matrice. La fel ca post__in/post__not_in, id-urile care sunt prezente în post_parent__in vor înlocui ID-urile specificate în post_parent__not_in (disponibile de atunci)
  • postează în (matrice) - utilizați ID-uri de postare. Specificați postările de preluat. ATENŢIE Dacă utilizați postări lipicioase, acestea vor fi incluse (prefixate!) în postările pe care le preluați, indiferent dacă doriți sau nu. Pentru a suprima acest comportament, utilizați.
  • post__nu_in (matrice) - utilizați ID-uri de postare. Specificați postarea care nu trebuie să fie preluată. Dacă aceasta este folosită în aceeași interogare ca post__in, va fi ignorată.
  • post_name__in (matrice) - folosiți melci post. Specificați postările de preluat. (disponibil de când)
  • tip_post (şir / matrice) - utilizați tipuri de posturi. Preia postările până la , valoarea implicită este „post”. Dacă „tax_query” este setat pentru o interogare, valoarea implicită devine „any”;
    • „post” - o postare.
    • „pagină” - o pagină.
    • „revizuire” – o revizuire.
    • „atașament” - un atașament. În timp ce post_status implicit WP_Query este „publicare”, atașamentele au un post_status implicit „moștenire”. Aceasta înseamnă că niciun atașament nu va fi returnat decât dacă setați în mod explicit post_status la „moștenire” sau „oricare”. (Vezi mai jos)
    • " nav_menu_item " - un element de meniu de navigare
    • „ orice ” - preia orice tip, cu excepția revizuirilor și a tipurilor cu „exclude_from_search” setat la adevărat.
    • Tipuri de postări personalizate (de exemplu, filme)

Afișați postarea după tip

Afișează numai pagini:

$interogare = new WP_Query(array("post_type" => "pagina"));

Afișează „orice” tip de postare (preluează orice tip, cu excepția revizuirilor și a tipurilor cu „exclude_from_search” setat la TRUE):

$interogare = new WP_Query(array("post_type" => "orice"));

Afișează mai multe tipuri de postări, inclusiv tipuri de postări personalizate:

$args = array("post_type" => array ("post", "pagina", "film", "carte")); $interogare = new WP_Query($args);

Parametrii de stare

  • post_status (şir / matrice) - utilizați starea postării. Preia postările de la . Valoarea implicită este „publicare”, dar dacă utilizatorul este conectat, se adaugă „privat”. Publice sunt, de asemenea, incluse în mod implicit. Și dacă interogarea este rulată într-un context de administrare (zonă de administrare sau apel AJAX), sunt adăugate și stări protejate. În mod implicit, stările protejate sunt „viitor”, „schiță” și „în așteptare”.
    • „publicare” - o postare sau o pagină publicată.
    • „în așteptare” - postarea este în așteptarea examinării.
    • „draft” - o postare în stare de schiță.
    • „auto-draft” - o postare nou creată, fără conținut.
    • „viitor” - o postare de publicat în viitor.
    • „privat” - nu este vizibil pentru utilizatorii care nu sunt autentificați.
    • „moștenire” - o revizuire. vedea.
    • „trash” - postarea este în coșul de gunoi (disponibilă din ).
    • „ orice ” - preia orice stare, cu excepția celor din stările postării cu „exclude_from_search” setat la adevărat (adică coș de gunoi și auto-schiță).

Afișează postarea după stare

Afișează numai schițele:

$interogare = new WP_Query(array("post_status" => "draft"));

Afișează starea mai multor postări:

$args = array("post_status" => array ("în așteptare", "schiță", "viitor")); $interogare = new WP_Query($args);

Afișează toate atașamentele:

$args = array("post_status" => "orice", "post_type" => "atașament"); $interogare = new WP_Query($args);

Parametrii de comentariu

$paged = (get_query_var("pagina")) ? get_query_var("pagina"): 1; $interogare = new WP_Query(array("paginat" => $paginat));

Afișează postări lipicioase

Afișează doar prima postare lipicioasă:

$sticky = get_option("sticky_posts"); $interogare = new WP_Query(array("p" => $sticky));

Afișează doar prima postare lipicioasă, dacă niciuna nu returnează ultima postare publicată:

$sticky = get_option("sticky_posts"); $args = array("posts_per_page" => 1, "post__in" => $sticky, "ignore_sticky_posts" =>

Afișează doar prima postare lipicioasă, adaugă această linie la blocul de mai sus:

Dacă ($lipicios) ( // introduceți aici lucrurile dvs.... )

Nu afișați postări lipicioase

Excludeți toate postările lipicioase din interogare:

$query = new WP_Query(array("post__not_in" => get_option("sticky_posts")));

Returnați TOATE postările din categorie, dar nu afișați ("ignora") postările lipicioase în partea de sus (se vor afișa în continuare în poziția lor naturală, de exemplu, după dată):

$query = new WP_Query(array("ignore_sticky_posts" => 1, "posts_per_page" => 3, "cat" => 6);

Excludeți postările lipicioase dintr-o categorie. Returnează postările din cadrul categoriei, dar exclude complet postările lipicioase și respectă regulile de paginare:

$paged = get_query_var("paginat")? get_query_var("paginat"): 1; $sticky = get_option("sticky_posts"); $args = array("cat" => 3, "ignore_sticky_posts" => 1, "post__not_in" => $sticky, "paged" => $paged,); $interogare = new WP_Query($args);

Parametrii de comandă și ordonare

Sortați postările preluate.

  • Ordin (șir | matrice) - Desemnează ordinea crescătoare sau descrescătoare a parametrului „orderby”. Implicit, „DESC”. O matrice poate fi utilizată pentru mai multe seturi de comandă/comandă.
    • "ASC" - ordine crescătoare de la valorile cele mai mici la cele mai mari (1, 2, 3; a, b, c).
    • „DESC” - ordine descrescătoare de la valorile cele mai mari la cele mai mici (3, 2, 1; c, b, a).
  • comanda prin (șir | matrice) - Sortați postările preluate după parametru. Implicit, „data (data_post)”. Pot fi trecute una sau mai multe opțiuni.
    • „none” - Nicio comandă (disponibilă din ).
    • „ID” - Comanda prin ID poștal. Notați scrierea cu majuscule.
    • „autor” - Ordonare după autor. ("post_author" este de asemenea acceptat.)
    • " titlu " - Ordonați după titlu. (" post_title "este de asemenea acceptat.)
    • " name " - Order by post name (post slug). (" post_name " is also accepted.)!}
    • " tip " - Ordonați după (disponibil din ). ("post_type" este de asemenea acceptat.)
    • „date” - Ordonați după dată. ("post_date" este de asemenea acceptat.)
    • „modificat” - Comandă după data ultimei modificări. ("post_modified" este de asemenea acceptat.)
    • „ parent ” - Comandă după post/pagină parent ID. ("post_parent" este de asemenea acceptat.)
    • " rand " - Ordine aleatorie. Puteți utiliza, de asemenea, „RAND(x)” unde „x” este o valoare de inițializare întreagă. Rețineți că un parametru „order” trebuie să fie prezent pentru ca randul „orderby” să funcționeze.
    • " comment_count " - Ordonează după numărul de comentarii (disponibil începând cu ).
    • " relevanță " - Ordonați după termenii de căutare în următoarea ordine: În primul rând, dacă întreaga propoziție este potrivită. În al doilea rând, dacă toți termenii de căutare sunt în titluri. În al treilea rând, dacă vreunul dintre termenii de căutare apare în titluri. Și, în al patrulea rând, dacă propoziția completă apare în cuprins.
    • „menu_order” - Comandă după ordinea paginii. Folosit cel mai des pentru ( Ordin câmp din caseta Editare atribute de pagină) și pentru (câmpurile întregi din dialogul Insert / Upload Media Gallery), dar poate fi folosit pentru orice tip de postare cu valori distincte „menu_order” (toate implicit la 0).
    • " meta_value " - Rețineți că a" meta_key=keyname " must also be present in the query. Note also that the sorting will be alphabetical which is fine for strings (i.e. words), but can be unexpected for numbers (e.g. 1, 3, 34, 4, 56, 6, etc, rather than 1, 3, 4, 6, 34, 56 as you might naturally expect). Use " meta_value_num " instead for numeric values. You may also specify " meta_type " if you want to cast the meta value as a specific type. Possible values are "NUMERIC", "BINARY", "CHAR", "DATE", "DATETIME", "DECIMAL", "SIGNED", "TIME", "UNSIGNED", same as in " $meta_query ". When using " meta_type " you can also use " meta_value_* " accordingly. For example, when using DATETIME as " meta_type " you can use " meta_value_datetime " to define order structure.!}
    • " meta_value_num " - Ordonați după metavaloare numerică (disponibilă din ). De asemenea, rețineți că „meta_key=keyname” trebuie să fie prezent și în interogare. Această valoare permite sortarea numerică așa cum s-a menționat mai sus în „ meta_value ”.
    • " post__in " - Preserve post ID order given in the " post__in " array (available since ). !} Notă
    • " post_name__in " - Păstrează ordinea post slug dată în matricea " post_name__in " (disponibilă din ). Notă- valoarea parametrului de ordine nu modifică ordinea de sortare rezultată.
    • " post_parent__in " - Păstrează ordinea post-parent dată în matricea " post_parent__in " (disponibilă din ). Notă- valoarea parametrului de ordine nu modifică ordinea de sortare rezultată.

Afișați postările sortate după titlu, ordine descrescătoare

Afișează postările sortate după „titlu” postării în ordine descrescătoare:

$args = array("orderby" => "titlu", "comanda" =>

Afișați postările sortate după „menu_order” cu o alternativă la postarea „title”, într-o ordine descrescătoare:

$args = array("orderby" => "menu_order title", "order" => "DESC",); $interogare = new WP_Query($args);

Afișează postarea aleatorie

Afișează o postare aleatorie:

$args = array("orderby" => "rand", "posts_per_page" => 1,); $interogare = new WP_Query($args);

Afișați postări populare

Afișează postările ordonate după numărul de comentarii:

$args = array("orderby" => "comment_count"); $interogare = new WP_Query($args);

Afișați produsele sortate după preț

Afișați postările cu tipul „Produs” ordonate după câmpul personalizat „Preț”:

$args = array("post_type" => "produs", "orderby" => "meta_value_num", "meta_key" => "pret",); $interogare = new WP_Query($args);

Mai multe valori „ordonate”.

Afișează paginile ordonate după „titlu” și „menu_order”. (titlul este dominant):

$args = array("post_type" => "pagina", "orderby" => "titlu meniu_ordine", "comanda" => "ASC",); $interogare = new WP_Query($args);

Mai multe valori „orderby” folosind o matrice

Afișează paginile ordonate după „title” și „menu_order” cu diferite ordine de sortare (ASC/DESC) (disponibil începând cu ):

$args = array("orderby" => array("title" => "DESC", "menu_order" => "ASC")); $interogare = new WP_Query($args);

Perechi multiple de comandă/comandă

$args = array("orderby" => array("meta_value_num" => "DESC", "title" => "ASC"), "meta_key" => "varsta"); $interogare = new WP_Query($args);

"orderby” cu „meta_value” și tipul de postare personalizat

Afișați postările de tip „my_custom_post_type”, ordonate după „vârstă” și filtrate pentru a afișa numai vârstele 3 și 4 (folosind meta_query).

$args = array("post_type" => "my_custom_post_type", "meta_key" => "varsta", "orderby" => "meta_value_num", "order" => "ASC", "meta_query" => array(array( "cheie" => "vârstă", "valoare" => matrice (3, 4), "compara" => "IN",),),); $interogare = new WP_Query($args);

"orderby" cu mai multe "meta_key".

Dacă doriți să comandați după două bucăți diferite de postmeta (de exemplu, Orașul pe primul loc și Statul pe al doilea), trebuie să combinați și să conectați meta interogarea la matricea dvs. orderby folosind „interogări meta numite”. Vezi exemplul de mai jos:

$q = new WP_Query(array("meta_query" => array("relation" => "ȘI", "state_clause" => array("key" => "state", "value" => "Wisconsin",) , "city_clause" => array("key" => "city", "compare" => "EXISTĂ",),, "orderby" => array("city_clause" => "ASC", "state_clause" => „DESC”,),));

Parametrii de dată

Afișați postările asociate cu o anumită perioadă de timp și dată.

  • an (int) - an din 4 cifre (de exemplu, 2011).
  • monthnum (int
  • w (int) - Săptămâna anului (de la 0 la 53). Utilizează comanda MySQL WEEK. Modul depinde de opțiunea „start_of_week”.
  • zi (int
  • ora (int) - Ora (de la 0 la 23).
  • minut (int) - Minut (de la 0 la 60).
  • al doilea (int) - Al doilea (de la 0 la 60).
  • m (int) - AnLună (de exemplu: 201307 ).
  • interogare_dată (matrice) - Parametri de dată (disponibili începând cu ).
    • an (int) - an din 4 cifre (de exemplu, 2011).
    • lună (int) - Numărul lunii (de la 1 la 12).
    • săptămână (int) - Săptămâna anului (de la 0 la 53).
    • zi (int) - Ziua lunii (de la 1 la 31).
    • ora (int) - Ora (de la 0 la 23).
    • minut (int) - Minut (de la 0 la 59).
    • al doilea (int) - Al doilea (de la 0 la 59).
    • după (șir/matrice) - Data după care se recuperează postările. Acceptă strtotime()
      • an (şir
      • lună (şir) Luna anului. Acceptă numerele 1-12. Implicit: 12.
      • zi (şir) Ziua lunii. Acceptă numerele 1-31. Implicit: ultima zi a lunii.
    • inainte de (șir/matrice) - Data pentru a prelua postările înainte. Acceptă șirul compatibil strtotime() sau o matrice de valori „an”, „lună”, „zi”:
      • an (şir) Acceptă orice an din patru cifre. Valoarea implicită este goală.
      • lună (şir) Luna anului. Acceptă numerele 1-12. Implicit: 1.
      • zi (şir) Ziua lunii. Acceptă numerele 1-31. Implicit: 1.
    • inclusiv (boolean) - Pentru după/înainte, dacă valoarea exactă ar trebui să fie potrivită sau nu".
    • comparaţie (şir) - Vezi WP_Date_Query::get_compare().
    • coloană (şir) - a interoga împotriva. Implicit: „data_post”.
    • relație (şir) - SAU sau ȘI, cum ar trebui comparate sub-matrice. Implicit: AND.

Returnează postări din 12 decembrie 2012:

$query = new WP_Query("year=2012&monthnum=12&day=12");

$args = array("date_query" => array(array("an" => 2012, "luna" => 12, "ziua" => 12,),),); $interogare = new WP_Query($args);

Returnează postări pentru astăzi:

$azi = getdate(); $query = new WP_Query("year=" . $today["year"] . "&monthnum=" . $today["luna"] . "&day=" . $today["mday"]);

$azi = getdate(); $args = array("date_query" => array(array("an" => $azi["an"], "luna" => $azi["luna"], "zi" => $azi["mday "],),),); $interogare = new WP_Query($args);

Returnează postări pentru această săptămână:

$saptamana = data("W"); $an = data("Y"); $interogare = new WP_Query("an=" . $an . "&w=" . $săptămână);

$args = array("date_query" => array(array("an" => data ("Y"), "saptamana" => data ("W"),),),); $interogare = new WP_Query($args);

Returnează postările între orele 9:00 și 17:00 în zilele lucrătoare

$args = array("date_query" => array(array("hour" => 9, "compare" => ">=",), array("hour" => 17, "compare" => "<=",), array("dayofweek" =>array(2, 6), "compara" => "ÎntRE",),), "posts_per_page" =>

Returnează postările de la 1 ianuarie până la 28 februarie

$args = array("date_query" => array(array("după" => "1 ianuarie 2013", "before" => array ("an" => 2013, "lună" => 2, "zi" => 28,), "inclusiv" => adevărat,),), "posts_per_page" => -1,); $interogare = new WP_Query($args);

Rețineți că dacă un șir compatibil strtotime() cu doar o dată a fost trecut în parametrul înainte, acesta va fi convertit la 00:00:00 la acea dată. În acest caz, chiar dacă inclusiv a fost setată la adevărat, data nu ar fi inclusă în interogare. Dacă doriți ca o dată anterioară să fie inclusivă, includeți și ora, cum ar fi „before” => „2013-02-28 23:59:59” , sau utilizați formatul matricei, care este ajustat automat dacă este setat inclusiv .

Returnează postări făcute cu peste un an în urmă, dar modificate în ultima lună

$args = array("date_query" => array(array("column" => "post_date_gmt", "before" => "acum 1 an",), array("column" => "post_modified_gmt", "după" => "Acum 1 luna",),), "posts_per_page" => -1,); $interogare = new WP_Query($args);

Clauzele „date_query” pot fi imbricate, pentru a construi interogări complexe. Consultați pentru detalii despre sintaxă.

Parametrii de câmp personalizat

Afișați postările asociate cu un anumit câmp personalizat.

Această parte a interogării este analizată de , așa că verificați și în cazul în care această listă de argumente nu este actualizată.

  • meta_key (şir) - Cheie de câmp personalizat.
  • meta_valoare (şir) - Valoarea câmpului personalizat.
  • meta_value_num (număr) - Valoarea câmpului personalizat.
  • meta_compara (şir) - Operator pentru a testa " meta_value ". Valorile posibile sunt"=", "!=", ">", ">=", "!}<", "<=", "LIKE", "NOT LIKE", "IN", "NOT IN", "BETWEEN", "NOT BETWEEN", "NOT EXISTS", "REGEXP", "NOT REGEXP" or "RLIKE". Default value is "=".
  • meta_query (matrice) - Parametri de câmp personalizat (disponibili din ).
    • relație (şir) - Relația logică dintre fiecare matrice interogă meta_query atunci când există mai multe. Valorile posibile sunt „ȘI”, „SAU”. Nu utilizați cu o singură matrice interogă meta_query.

meta_query conține, de asemenea, una sau mai multe matrice cu următoarele chei:

  • cheie (şir) - Cheie de câmp personalizat.
  • valoare (şir|matrice) - Valoarea câmpului personalizat. Poate fi o matrice numai atunci când comparaţie este „IN” , „NU ÎN” , „INTRE” sau „NU ÎNTRE” . Nu trebuie să specificați o valoare când utilizați comparațiile „EXISTĂ” sau „NU EXISTĂ” în WordPress 3.9 și versiuni ulterioare.
    (Notă: Din cauza erorii #23268, valoarea este necesară pentru ca comparațiile NU EXISTĂ să funcționeze corect înainte de 3.9. Trebuie să furnizați nisteșir pentru parametrul valoare. Un șir gol sau NULL NU va funcționa. Cu toate acestea, orice alt șir va face truc și NU va apărea în SQL când utilizați NOT EXISTS . Ai nevoie de inspirație? Ce zici de „bug #23268” .)
  • comparaţie (şir) - Operator de testat. Valorile posibile sunt "=", "!=", ">", ">=", "<", "<=", "LIKE", "NOT LIKE", "IN", "NOT IN", "BETWEEN", "NOT BETWEEN", "EXISTS" and "NOT EXISTS". Default value is "=".
  • tip (şir) - Tip de câmp personalizat. Valorile posibile sunt „NUMERIC”, „BINARY”, „CHAR”, „DATE”, „DATETIME”, „DECIMAL”, „SIGNED”, „TIME”, „UNSIGNED”. Valoarea implicită este „CHAR”. De asemenea, puteți specifica precizia și scara pentru tipurile „DECIMAL” și „NUMERIC” (de exemplu, „DECIMAL(10,5)” sau „NUMERIC(10)” sunt valide).

„Tipul” DATE funcționează cu valoarea „comparare” BETWEEN numai dacă data este stocată în formatul AAAA-LL-ZZ și testată cu acest format.

Notă importantă: meta_query ia o matrice a argumentelor meta interogare matrice(este nevoie de o serie de matrice) - puteți vedea acest lucru în exemplele de mai jos. Acest construct vă permite să interogați mai multe metadate utilizând relație parametrul din primul tablou (exterior) pentru a descrie relația booleană dintre interogările meta. Argumentele acceptate sunt „ȘI”, „SAU”. Valoarea implicită este „ȘI”.

Interogare simplă de câmp personalizat:

Afișați postările în care cheia câmpului personalizat este „culoare”, indiferent de valoarea câmpului personalizat:

$interogare = new WP_Query(array("meta_key" => "culoare"));

Afișați postările în care valoarea câmpului personalizat este „albastru”, indiferent de cheia câmpului personalizat:

$interogare = new WP_Query(array("meta_value" => "albastru"));

Afișează unde valoarea câmpului personalizat este „albastru”, indiferent de cheia câmpului personalizat:

$args = array("meta_value" => "albastru", "post_type" => "pagina"); $interogare = new WP_Query($args);

Afișați postările în care cheia câmpului personalizat este „culoare” și valoarea câmpului personalizat este „albastru”:

$args = array("meta_key" => "culoare", "meta_value" => "albastru"); $interogare = new WP_Query($args);

Afișați postările în care cheia câmpului personalizat este „culoare”, iar valoarea câmpului personalizat NU ESTE „albastru”:

$args = array("meta_key" => "culoare", "meta_value" => "albastru", "meta_compare" => "!="); $interogare = new WP_Query($args);

Afișează postările în care valoarea câmpului personalizat este un număr. Afișează numai postările în care numărul respectiv este mai mic de 10. (WP_Query folosește această ecuație pentru a compara: $post_meta . $args["meta_compare"] . $args["meta_value"] , unde "$post_meta" este valoarea postării personalizate meta stocat în fiecare postare, ecuația reală cu valorile completate: $post_meta< 10)

$args = array("post_type" => "post", "meta_key" => "număr", "meta_value_num" => 10, "meta_compare" => "<",); $query = new WP_Query($args);

Afișați postările în care cheia câmpului personalizat este o dată stabilită și valoarea câmpului personalizat este acum. Afișează numai postările pentru care data nu a trecut.

$args = array("post_type" => "eveniment", "meta_key" => "data_eveniment", "meta_value" => data ("Ymd"), // schimbarea modului în care este stocată "data evenimentului" "meta_compare" = > ">",); $interogare = new WP_Query($args);

Afișați „produse” (produse) în care cheia câmpului personalizat este „preț” și valoarea câmpului personalizat care este MAI MAI SAU EGALĂ CU 22.
Prin utilizarea parametrului „meta_value”, valoarea 99 va fi considerată mai mare decât 100, deoarece datele sunt stocate ca „șiruri”, nu „numere”. Pentru compararea numerelor utilizați „meta_value_num”.

$args = array('meta_key' => 'preț', 'meta_value' => '22', 'meta_compare' => '<=', 'post_type' =>'produs'); $interogare = new WP_Query($args);

Afișați postările cu o valoare a câmpului personalizat zero (0), indiferent de cheia câmpului personalizat:

$args = array('meta_value' => '_wp_zero_value'); $interogare = new WP_Query($args);

Gestionare un singur câmp personalizat:

Afișează postările dintr-un singur câmp personalizat:

$args = array('post_type' => 'produs', 'meta_query' => array(array('key' => 'culoare', 'value' => 'albastru', 'compare' => 'NU LIKE') ,),),); $interogare = new WP_Query($args);

(Rețineți că meta_query se așteaptă la matrice imbricate, chiar dacă aveți o singură interogare.)

Selectează înregistrările din baza de date pe baza unor criterii specificate. Funcțiile get_posts() și query_posts() și toate celelalte interogări legate de selectarea postărilor din tabelul wp_posts funcționează pe baza WP_Query.

Note despre filtre

Puteți utiliza următoarele filtre pentru a încorpora direct în interogarea SQL în sine.

Important: dacă parametrul este specificat, atunci toate aceste cârlige nu vor funcționa!

Filtre declanșate înainte de a seta cererea de paginare:
  • - modifică SQL „UNDE”
  • posts_join - modifică SQL „JOIN”
Filtre declanșate după setarea unei cereri de paginare:
  • - modifică SQL „WHERE” în ​​timpul paginarii
  • posts_groupby - modifică SQL „GROUP BY”
  • posts_join_paged - modifică SQL „JOIN” în timpul paginarii
  • posts_orderby - modifică SQL „ORDER BY”
  • posts_distinct - modifică SQL „DISTINCTROW”
  • post_limits - modifică SQL „LIMIT”
  • posts_fields - modifică câmpurile rezultate din tabel
  • post_mime_type (șir/matrice)

    Tip de înregistrare MIME. Folosit numai pentru atașamente - postări cu tipul „atașament”.

    Această opțiune va funcționa numai când opțiunea post_type = atașament și post_status = moștenire. Acestea. Numai atașamentele pot avea un tip MIME.

    Vom primi doar imagini de orice tip

    $query = new WP_Query(array("post_mime_type" => "imagine", "post_type" => "atașament", "post_status" => "moștenire",));

    Vom primi doar imagini gif

    $query = new WP_Query(array("post_mime_type" => "imagine/gif", "post_type" => "atașament", "post_status" => "moștenire",));

    Vom primi toate tipurile de atașamente, cu excepția imaginilor

    $query = new WP_Query(array("post_mime_type" => array("application","text","video","audio")), "post_type" => "atașament", "post_status" => "moștenire", ));

    Opțiuni Statuturi

    Preia postările cu starea specificată.

    Post_status (șir/matrice)

    Starea postării.

    În mod implicit, publicați , iar dacă utilizatorul este autorizat, este adăugat și privat. Dacă solicitarea este lansată din partea de administrare, se adaugă și tipuri de stare protejate: viitor, draft și în așteptare. Toate tipurile de stare:

    • publica - postare publicată.
    • în așteptare - postarea este moderată.
    • draft - draft.
    • auto-draft - o schiță salvată de WordPress însuși (salvare automată).
    • viitor - post planificat.
    • privat - post personal.
    • moștenire - revizuire sau atașare.
    • trash - postare ștearsă (în coșul de gunoi). Din versiunea 2.9.
    • orice - toate stările, cu excepția stărilor al căror parametru specifică exclude_from_search=true . Vedeți register_post_status() și get_post_stati() .

    Implicit: „publicare”

    Postări după stare

    Vom primi doar ciorne:

    $interogare = new WP_Query("post_status=draft");

    Vom primi postări cu diferite stări:

    $interogare = new WP_Query(array("post_status" => array("în așteptare", "schiță", "viitor")));

    Vom primi toate tipurile de investiții:

    $query = new WP_Query(array("post_status" => "orice", "post_type" => "atașament"));

    Opțiuni Date (ore)

    Afișează postările aparținând unei anumite perioade de timp.

    An (număr) 4 cifre ale anului (2013) lunanum (număr) Numărul lunii (1 - 12) w (număr) Săptămâna anului (de la 0 la 53) zi (număr) Ziua lunii (1 - 31) oră (număr) Ora (0 - 23) minute (număr) Minut (0 - 60) secunde (număr) Al doilea (0 - 60) m (număr) YearMonth (201306) date_query (matrice)

    Parametrii prin care se va configura cererea. Funcționează pe baza unei clase separate: WP_Date_Query.

    Acest parametru este specificat ca o matrice, care poate conține matrice imbricate. Parametrii: coloana, compararea, relația pentru matricea principală funcționează ca parametri impliciti pentru matricele imbricate (dacă există).

      coloană - câmp din baza de date pentru cerere. Pot fi:
      data_post
      post_date_gmt
      post_modificat
      post_modified_gmt
      comentariu_data
      comment_date_gmt
      user_registered
      Implicit: „post_date”

      compare - Operator de comparație pentru toate tablourile imbricate în mod implicit. Poate: Poate: = , != , > , >= ,< , <= , IN , NOT IN , BETWEEN , NOT BETWEEN .
      Implicit: "="

      relație - operator dacă sunt specificate mai multe tablouri cu date:
      ȘI (luați în considerare toate matricele specificate simultan).
      SAU (dacă există potriviri cu cel puțin o matrice specificată).
      Implicit - SAU

      Opțiunile de mai jos ar trebui folosite în matrice imbricate. Ei definesc o interogare pentru o singură dată.

      De asemenea, toți parametrii de mai jos pot fi utilizați în matricea principală.

      • inainte de (șir/matrice)- Data înregistrărilor „până la” care va fi primită. Preia un șir pe care funcția strtotime() îl va înțelege: toate formatele posibile. Sau puteți trece o matrice cu indici: year , month , day: array("year"=>"2015", "month" =>"5", "day" =>"28")

        după (șir/matrice)- Data înregistrărilor „după” care vor fi primite. Preia un șir pe care funcția strtotime() îl va înțelege: toate formatele posibile. Sau puteți trece o matrice cu indecși: year , month , day: array("year" => "2015", "month" => "5", "day" => "28")
        Raportat la ora actuală a site-ului (nu UTC).

        coloană (linia)- vezi mai sus, doar pentru o anumită dată. Implicit: valoarea matricei de top.

        comparaţie (linia)- vezi mai sus, doar pentru o anumită dată. Valoarea implicită este „=".

        inclusiv (logic)- argumentele înainte și după sunt procesate inclusiv dacă sunt adevărate. Implicit: false.

      • an (număr/matrice)- anul, de exemplu 2013
      • ziua anului (număr/matrice)- numărul zilei din an, 1-366.
      • lună (număr/matrice)- luna, 1-12
      • săptămână (număr/matrice)- saptamana, 0-53
      • zi (număr/matrice)- ziua, 1-31
      • zi a săptămânii (număr/matrice)- ziua săptămânii, 1-7, unde 1 este duminica
      • dayofweek_iso (număr/matrice)- ziua săptămânii, 1-7, unde 1 este luni
      • ora (număr/matrice)- ora, 0-23
      • minut (număr/matrice)- minut, 0-60
      • al doilea (număr/matrice)- al doilea, 0-60

      În parametrii: year , month , week , dayofyear , day , dayofweek , dayofweek_iso , hour , minute , second se pot specifica mai multe valori, sub forma unui tablou, dacă parametrul de comparare se potrivește.

    #1. Să luăm postările de azi:

    $azi = getdate(); $query = new WP_Query("year=" . $today["year"] . "&monthnum=" . $today["luna"] . "&day=" . $today["mday"]);

    #2. Să primim postări pentru ultima săptămână:

    $saptamana = data("W"); $an = data("Y"); $interogare = new WP_Query("an=" . $an . "&w=" . $săptămână);

    #3. Să primim postări pentru 20 decembrie:

    $interogare = new WP_Query ("luna=12&day=20");

    #4. Să primim postări pentru perioada de timp de la 1 martie până la 15 martie 2010:

    // Creați o funcție nouă care va adăuga o condiție unde la funcția de interogare filter_where($where = "") ( // de la 1 martie până la 15 martie 2010 $where .= " AND post_date >= "2010-03-01 „ȘI data_post< "2010-03-16""; return $where; } add_filter("posts_where", "filter_where"); $query = new WP_Query($query_string); remove_filter("posts_where", "filter_where");

    Interogările de mai sus returnează postări pentru o anumită perioadă din istoric: „Postări pentru X luni, X zi”. Ei nu pot primi postări pentru o perioadă de timp arbitrară în raport cu prezentul. Prin urmare, interogări precum „Postări din ultimele 30 de zile” sau „Postări din ultimul an” nu sunt posibile în versiunea de bază pentru astfel de interogări, trebuie să utilizați filtrul „posts_where”. Exemplele de mai jos arată cum să faceți acest lucru.

    #5. Să primim postări din ultimele 30 de zile:

    // Creați o nouă funcție care va adăuga o condiție unde la funcția de interogare filter_where($where = "") ( // pentru ultimele 30 de zile $where .= " AND post_date > "" . date("Y-m-d", strtotime ("-30 de zile"). $interogare = new WP_Query($query_string); remove_filter("postări_unde", "filtru_unde");

    #6. Vom primi postări pentru perioada de la 30 la 60 de zile înainte de prezent:

    // Creați o nouă funcție care va adăuga o condiție unde la funcția de interogare filter_where($where = "") ( // de la 30 la 60 de zile $where .= " AND post_date >= "" . date("Y-m-d", strtotime("- 60 de zile") . "ȘI data_post<= "" . date("Y-m-d", strtotime("-30 days")) . """; return $where; } add_filter("posts_where", "filter_where"); $query = new WP_Query($query_string); remove_filter("posts_where", "filter_where");

    Parametrul „m” poate fi setat doar în lista de postări din panoul de administrare. Este util atunci când selectați dintr-o listă derulantă de selectare în care data este setată la numărul AAAAmm.

    Exemple cu parametrul date_query

    #1. Primim postări între orele 9 și 17:

    $args = array("date_query" => array(array("hour" => 9, "compare" => ">=",), array("hour" => 17, "compare" => "<=",), array("dayofweek" =>array(2, 6), "compara" => "ÎntRE",),), "posts_per_page" =>

    #2. Vom primi postări pentru perioada de timp: 1 ianuarie - 28 februarie:

    Datele pot fi specificate ca numere sau șiruri, deoarece argumentele înainte și după sunt procesate de funcția PHP strtotime(), care înțelege șirurile.

    $args = array("date_query" => array(array("după" => "1 ianuarie 2013", "before" => array ("an" => 2013, "lună" => 2, "zi" => 28,), "inclusiv" => adevărat,),), "posts_per_page" => -1,); $interogare = new WP_Query($args);

    #3. Să publicăm postări acum un an, dar schimbate în ultima lună:

    $args = array("date_query" => array(array("column" => "post_date_gmt", "before" => "acum 1 an",), array("column" => "post_modified_gmt", "după" => "Acum 1 luna",),), "posts_per_page" => -1,); $interogare = new WP_Query($args);

    #4. Să primim postări din ultimele 2 săptămâni folosind șirul „acum 2 săptămâni”:

    $interogare = new WP_Query(array("date_query" => array("după" => "acum 2 săptămâni",),));

    #5. Să obținem intrări pentru ultimele 2 luni, publicate în zilele lucrătoare:

    $interogare = new WP_Query(array("date_query" => array("după" => "acum 2 luni", array("dayofweek" => array(1, 5), "compare" => "INTRE",) ,),));

    Argumentul date_query funcționează și cu clasa WP_Comment_Query, deci poate fi folosit în același mod în funcția: get_comments() .

    Opțiuni Indentare

    Puteți seta o indentare de la prima postare din rezultatele interogării. De exemplu, o solicitare standard returnează 6 postări, dar dacă adăugați parametrul offset=1 la aceeași solicitare, atunci vor fi returnate 5 postări (prima postare din solicitare va fi omisă).

    Decalaj (număr) Câte postări din rezultatele interogării trebuie săriți.

    Exemplu de utilizare

    Să sărim peste prima/o postare (offset=1) și să returnăm următoarele 5:

    $query = new WP_Query("posts_per_page=5&offset=1");

    Opțiuni Sortarea și ordonarea

    Sortează și stabilește direcția de sortare.

    Opțiunile de sortare nu vor funcționa dacă specificați parametrul fields = ids, deoarece în acest caz, cererea nu va avea câmpuri după care puteți sorta rezultatul.

    Ordin (linia)

    Direcția de sortare după parametrul orderby poate fi:

    • ASC - în ordine, de la cel mai mic la cel mai mare (1, 2, 3; a, b, c).
    • DESC - în ordine inversă, de la cel mai mare la cel mai mic (3, 2, 1; c, b, a).
    comanda prin (linia)

    Câmpuri după care puteți sorta postările. Pot fi

    • none - nu sortați, afișați așa cum este în baza de date. Echivalent cu sortarea după ID. Din versiunea 2.8.
    • ID - sortați după ID.
    • autor - sortarea după ID-uri de autor.
    • titlu - sortați după titlu.
    • nume - după titlul postării (etichetă, post slug).
    • data - sortați după data publicării.
    • modificat - sortați după data modificării.
    • tip - după tipul postului (post_type). Din versiunea 4.0
    • părinte - sortarea după valoarea câmpului părinte.
    • rand - ordine aleatorie.
    • RAND(x) - ordine aleatorie pentru valorile numerice. Aici „x” este un număr întreg.
    • comment_count - sortarea după numărul de comentarii. Din versiunea 2.9.
    • relevanță - după condiția de căutare (parametrul s). Sortarea are loc în următoarea ordine: 1) dacă întreaga propoziție se potrivește. 2) toți termenii de căutare din titlul postării. 3) orice cuvinte din interogarea de căutare din titlul postării. 4) propoziția completă se găsește în conținutul postării.
    • menu_order - utilizat în mod standard pentru pagini și atașamente. Numărul de serie este indicat pe pagina de editare a postării.
    • meta_value - după valoarea unui câmp personalizat.

      Important: trebuie definit și parametrul meta_key. Notă: sortarea va fi alfabetică și nu va fi logică dacă valorile câmpurilor arbitrare sunt numere (de exemplu, va fi 1, 3, 34, 4, 56, 6 etc., și nu 1, 3, 4, 6, 34, 56).

    • meta_value_num - sortarea după câmpuri personalizate ale căror valori sunt numere. Din versiunea 2.8.
    • cheie matrice din meta_query - în acest caz, sortarea va fi după valoarea unui câmp personalizat specificat în matricea meta_query.
    • post__in - ia în considerare ordinea ID-urilor specificate în parametrul post__in. Parametrul de comandă este ignorat.
    • post_name__in - ia în considerare ordinea numelor specificate în parametrul post_name__in. Parametrul de comandă este ignorat.
    • post_parent__in - ia în considerare ordinea ID-urilor specificate în parametrul post_parent__in. Parametrul de comandă este ignorat.
    orderby = matrice ()

    Începând cu WordPress 4.0, puteți specifica o matrice în orderby care combină ambii parametri: orderby și order . Acest lucru se face pentru a sorta după mai multe coloane în același timp. Sintaxa este următoarea:

    "orderby" => array("title" => "DESC", "menu_order" => "ASC")

    #1 Sortați după titlu

    $query = new WP_Query(array("orderby" => "titlu", "comanda" => "DESC"));

    Sortați după ordinea meniului și apoi după titlu

    $query = new WP_Query(array("orderby" => "menu_order title", "order" => "DESC"));

    # 2 Să afișăm o postare aleatorie:

    $query = new WP_Query(array("orderby" => "rand", "posts_per_page" => "1"));

    # 3 Să ​​sortăm postările după numărul de comentarii:

    $interogare = new WP_Query(array("orderby" => "comment_count"));

    #4 Sortați produsele după preț (prețul câmpului personalizat):

    $query = new WP_Query(array("post_type" => "produs", "orderby" => "meta_value", "meta_key" => "pret"));

    # 5 Sortare multiplă

    Să afișăm postările sortate după două câmpuri: „title” și „menu_order” (titlul este de importanță primordială):

    $query = new WP_Query(array("post_type" => "pagina", "orderby" => "titlu meniu_ordine", "ordine" => "ASC"));

    #6 Sortare multiplă folosind o matrice (de la versiunea 4.0)

    Să obținem paginile sortate după titlu și numărul meniului (menu_order) în ordine diferită (ASC/DESC):

    $interogare = new WP_Query(array("orderby" => array("title" => "DESC", "menu_order" => "ASC")));

    #7 Sortarea după „meta_value” pentru un nou tip de postare (post_type)

    Să afișăm postările de tip „my_custom_post_type” sortate după cheia de câmp personalizat „vârsta” și filtrate astfel încât să fie afișate numai postările cu valorile câmpului 3 și 4:

    $args = array("post_type" => "my_custom_post_type", "meta_key" => "varsta", "orderby" => "meta_value_num", "order" => "ASC", "meta_query" => array(array( "cheie" => "vârstă", "valoare" => matrice (3, 4), "comparare" => "IN",))); $interogare = new WP_Query($args);

    #8 Sortarea după mai multe metacâmpuri

    Pentru a sorta rezultatul după două metacâmpuri diferite, de exemplu, mai întâi după oraș și apoi după stat, trebuie să specificați cheile pentru tablourile din matricea meta_query și apoi să utilizați acele chei în parametrul orderby:

    $query = new WP_Query([ "meta_query" => [ "relation" => "ȘI", "state_clause" => [ "key" => "state", "value" => "Wisconsin", ], "city_clause" " => [ "key" => "city", "compare" => "EXISTĂ", ], ], "orderby" => [ "city_clause" => "ASC", "state_clause" => "DESC", ], ]);

    Opțiuni Paginare

    nepaging (logic) Dezactivează paginarea și afișează toate postările pe o singură pagină. postări_pe_pagină (număr)

    Numărul de postări pe o singură pagină. Dacă îl setați la -1, atunci toate postările vor fi afișate (fără paginare).

    Din versiunea 2.1, înlocuiește parametrul showposts. Setați opțiunea paginată dacă paginarea nu funcționează după utilizarea acestei opțiuni.

    Notă: dacă cererea este în partea de feed, WP suprascrie acest parametru cu opțiunea posts_per_rss. Pentru a influența afișarea postărilor în feed, utilizați filtrele post_limits sau pre_option_posts_per_rss.

    Postări_pe_pagină_arhivă (număr) Numărul de postări pentru paginile de arhivă: pentru paginile care îndeplinesc condițiile is_archive() sau is_search(). Această opțiune înlocuiește opțiunile „posts_per_page” și „showposts”. decalaj (număr) Câte postări să săriți din partea de sus a selecției (liniuță de sus).
    Atenţie: Setarea acestei opțiuni suprascrie/ignoră opțiunea „paginată” și întrerupe paginarea (rezolvarea problemei). paginat (număr) Numărul paginii de paginare. Afișează postările care ar fi afișate în mod normal pe pagina de paginare X Suprascrie parametrul posts_per_page (număr) Număr pentru pagina de pornire statică. Afișează postări care ar fi afișate în mod normal pe pagina de paginare X a paginii statice principale (prima pagina). ignore_sticky_posts (logic)

    Ignorați postările lipicioase sau nu (adevărat/fals). Din versiunea 3.1. Înlocuiește parametrul caller_get_posts.

    Postările lipicioase nu vor apărea în partea de sus a listei, dar nu sunt excluse și vor apărea în ordinea normală.

    #1 Postări pe pagină

    Primim 3 postări:

    $query = new WP_Query("posts_per_page=3");

    Să primim toate postările:

    $interogare = new WP_Query("posts_per_page=-1");

    Să obținem toate postările și să dezactivăm paginarea:

    $interogare = new WP_Query("nopaging=true");

    # 2 Umplutură de sus

    Să primim postări începând cu a patra (vom sări peste primele 3):

    $interogare = new WP_Query("offset=3"));

    Primim 5 postări care urmează primelor trei postări:

    $query = new WP_Query(array("posts_per_page" => 5, "offset" => 3));

    #3 Postări de pe pagina de paginare 6

    $interogare = new WP_Query("paged=6");

    #4 Postări de pe pagina curentă

    Să obținem postări de pe pagina de paginare curentă. Util atunci când construiți paginarea personalizată:

    $query = new WP_Query([ "paginat" => get_query_var ("paginat") ]);

    Să obținem postări de pe pagina curentă și să setăm parametrul paginat la 1 când variabila nu este definită pe prima pagină de paginare:

    $paged = get_query_var("paginat")? get_query_var("paginat"): 1; $interogare = new WP_Query([ "paginat" => $paginat ]);

    Utilizați get_query_var("pagina") dacă trebuie să obțineți numărul paginii de paginare a paginii primare statice a site-ului - is_front_page() . Variabila de pagină în acest caz conține numărul de paginare pe paginile tip post când conținutul folosește eticheta de paginare .

    Ieșirea paginii de paginare curentă pe o pagină principală statică:

    $paged = get_query_var("pagina") ?: 1; $interogare = new WP_Query([ "paginat" => $paginat ]);

    #5 Intrări adezive (postări)

    # Toate postările lipicioase
    $sticky = get_option("sticky_posts"); $interogare = new WP_Query([ "post__in" => $sticky ]);
    # Doar primul post lipicios
    $sticky = get_option("sticky_posts"); $interogare = new WP_Query("p=" . $sticky);
    # Primul post sticky, dacă nu există o astfel de postare, apoi ultimul publicat
    $args = array("posts_per_page" => 1, "post__in" => get_option("sticky_posts"), "ignore_sticky_posts" => 1); $interogare = new WP_Query($args);
    # Prima postare lipicioasă, dacă nu există o astfel de postare, atunci nu afișăm nimic
    $sticky = get_option("sticky_posts"); if (! empty($sticky)) ( $query = new WP_Query(array("posts_per_page" => 1, "post__in" => $sticky, "ignore_sticky_posts" => 1)); // generează rezultatul... )
    # 5 cele mai recente postări lipicioase
    $sticky = get_option("sticky_posts"); // toate intrările Sticky rsort($sticky); // sortare - altele noi în partea de sus $sticky = array_slice($sticky, 0, 5); // primiți primele 5 $interogare = new WP_Query([ "post__in"=>$sticky, "ignore_sticky_posts"=>1 ]);

    # 6 Ascunderea postărilor lipicioase

    Să excludem toate postările lipicioase din solicitare:

    $query = new WP_Query([ "post__not_in" => get_option("sticky_posts") ]);

    Să excludem postările lipicioase din categorie. Va returna toate postările din categorie, dar postările lipicioase nu vor fi în partea de sus, ele vor fi afișate ca postări obișnuite (după dată):

    $query = new WP_Query([ "ignore_sticky_posts" => 1, "posts_per_page" => 3, "cat" => 6 ]);

    Să excludem postările lipicioase din categorie. Va returna toate postările din categorie, dar postările lipicioase vor fi complet excluse. Să adăugăm și aici o regulă pentru paginarea corectă:

    $paginat = get_query_var("paginat") ?: 1; $sticky = get_option("sticky_posts"); $query = new WP_Query(array("cat" => 3, "ignore_sticky_posts" => 1, "post__not_in" => $sticky, "paginat" => $paginat));

    Opțiuni Comentarii

    Datele de comentariu postare sunt adăugate la obiectul WP_Query dacă este o postare separată. Parametrii de mai jos indică modul în care ar trebui să fie primite comentariile în astfel de cazuri.

    Stare_Comentariu (linia) Starea comentariului. ping_status (număr) Starea ping. comentarii_pe_pagină (număr) Numărul de comentarii de primit pe o pagină individuală de comentarii. Opțiune implicită: comments_per_page . comentarii_număr (număr/matrice)

    Numărul de comentarii pe care ar trebui să le aibă o postare. Din versiunea 4.9.

    • Dacă specificați un număr, acesta va primi postări cu numărul specificat de comentarii (operatorul de căutare =).
    • Matricea vă permite să specificați o opțiune pentru compararea numărului de comentarii. Puteți specifica parametrii în matrice:
      • valoare (număr)- numărul de comentarii pentru comparație.
      • comparaţie (linia)- cum se compară numărul de comentarii. Poate: = , != , > , >= ,< , <= . По умолчанию: = .

    Opțiuni Căutare

    s (linia) Expresie de căutare. corect (logic) true - căutați folosind expresia exactă specificată în parametrul s - fără a adăuga % la sfârșitul frazei de căutare în interogarea SQL.
    Implicit: false propoziție (adevarat fals) adevărat - căutați folosind expresia de căutare completă, așa cum este.
    fals - fraza de căutare este împărțită în cuvinte și căutarea se efectuează în funcție de cuvintele din expresia de căutare.
    Implicit: false

    Postări găsite folosind expresia de căutare:

    $interogare = new WP_Query("s=cuvânt cheie");

    Opțiuni Câmpuri de returnare

    Setează ce date ar trebui să returneze cererea.

    Câmpuri (șir/matrice)

    Ce date să returnezi. În mod implicit, toate sunt returnate.

    • ids - va returna o matrice cu ID-uri de postare.
    • id=>parent - va returna o matrice asociativa [ parent => ID, … ].
    • Inserarea oricăror alți parametri va returna toate câmpurile (în mod implicit) - o matrice de obiecte post.
    nicio_rânduri_găsite (logic) adevărat - nu numărați numărul de linii găsite. În unele cazuri, aceasta poate accelera solicitarea.
    Implicit: false

    Opțiuni Memorarea în cache

    Nu adaugă date în cache atunci când se execută interogări.

    Cache_results (adevarat fals) Dacă trebuie să memorați în cache informațiile postării.
    Implicit: adevărat update_post_meta_cache (adevarat fals) Dacă trebuie să memorați în cache informații despre metadatele postate.
    Implicit: adevărat update_post_term_cache (adevarat fals) Dacă trebuie să memorați în cache informații despre conectarea unei postări la termeni și taxonomii.
    Implicit: adevărat lazy_load_term_meta (adevarat fals) Dacă să încărcați lene metadatele termenilor.
    false - va dezactiva încărcarea lenenă a metadatelor termenilor și fiecare apel la get_term_meta() va accesa baza de date.
    Implicit: valoarea $update_post_term_cache

    #1 Vom afișa 50 de postări, dar nu vom adăuga informații despre postări în cache:

    $query = new WP_Query(array("posts_per_page" => 50, "cache_results" => false));

    #2 Vom afișa 50 de postări, dar nu vom adăuga metadate postări în cache

    $query = new WP_Query(array("posts_per_page" => 50, "update_post_meta_cache" => false));

    #3 Vom afișa 50 de postări, dar nu vom adăuga informații despre termenii postării în cache

    $query = new WP_Query(array("posts_per_page" => 50, "update_post_term_cache" => false));

    De obicei nu este nevoie să utilizați aceste funcții - cache-ul este necesar! Cu toate acestea, această abordare poate fi utilă într-un număr de cazuri. De exemplu, dacă trebuie să obținem o listă cu titlurile postărilor și nu avem nevoie de alte informații despre postări: nici taxonomii, nici metadate. Dacă nu încărcăm aceste informații, putem economisi timp în interogările SQL inutile.

    Nota: dacă se folosește pluginul de cache persistent, toate aceste steaguri sunt setate implicit la false, deoarece nu este nevoie să reîmprospătați memoria cache de fiecare dată când pagina este încărcată.

    Opțiuni Filtre (cârlige)

    suprimă_filtre (adevarat fals)

    Ar trebui să fie dezactivate unele filtre (cârlige) din clasa WP_Query. Activarea acestui parametru dezactivează toate filtrele de modificare a interogărilor SQL, cum ar fi posts_* sau comment_feed_* .

    true - dezactivează procesarea următoarelor cârlige:

    Posts_search posts_search_orderby posts_where posts_join posts_where_paged posts_groupby posts_join_paged posts_orderby posts_distinct post_limits posts_fields posts_clauses posts_where_request posts_groupby_request posts_join_request posts_request by posts_request_request_posts_request_posts_request quest posts_clauses_request posts_request posts_results the_post s comment_feed_join comment_feed_where comment_feed_groupby comment_feed_orderby comment_feed_limits init() Activează un obiect, setează toate valorile proprietăților la null, 0 sau false. parse_query($query) Primește parametrii de interogare, îi parsează și setează proprietățile de bază ale clasei: $posts , $post_count , $post și $current_post . parse_query_vars() Analizează din nou vechea interogare. get($query_var) Preia o variabilă de interogare după nume. set($query_var, $value) Setează variabila de interogare. Indică: numele variabilei și valoarea acesteia. &get_posts() Preia postările necesare din baza de date. De asemenea, populează proprietățile $posts și $post_count. next_post() Folosit în timpul buclei. Trece la următoarea postare din matricea $posts. Setează $current_post și $post . Metoda nu setează variabila globală $post, ci afectează o variabilă din clasă. Returnează datele postării curente (obiect). the_post() Folosit în timpul buclei. Trece la următoarea postare și modifică variabila globală $post . have_posts() Folosit chiar înainte de buclă. Verifică dacă există postări de afișat. rewind_posts() Resetează variabilele $current_post și $post. &query($query) Apelează metodele: parse_query() și get_posts() . Returnează rezultatul get_posts() . get_queried_object() Completează variabila $queried_object dacă nu este deja completată și o returnează. get_queried_object_id() Completează variabila $queried_object_id dacă nu este deja completată și o returnează. __construct($query = "") Constructor al clasei. Dacă datele de interogare sunt transmise, apelează metoda query() și îi transmite datele.

Dacă lucrați cu WordPress de ceva vreme, veți ști cât de greu era înainte să creați liste de postări bazate pe un număr mare de criterii și, în același timp, să respectați standardele WordPress. Dar platforma a parcurs un drum lung în ultimii ani. Și acum, cu ajutorul unei clase puternice WP_Query, putem crea liste de mesaje fără a ne limita în vreun fel.

Ce este WP_Query?

Clasă WP_Query este una dintre cele mai importante părți din motorul WordPress. Printre altele, determină interogările de care aveți nevoie pe orice pagină și afișează mesajele conform criteriilor specificate. De asemenea, stochează o mulțime de informații despre solicitările pe care le face, ceea ce ajută la optimizarea paginii (și la eliminarea erorilor).

WP_Query ne permite să efectuăm interogări complexe de baze de date într-o manieră sigură, simplă și modulară.

Siguranță

Pe parcursul interacțiunii noastre cu acest obiect, specificăm doar parametrii și folosim funcții pentru a ne atinge scopul. Obiectele interne în sine se ocupă de multe dintre probleme, cum ar fi protejarea împotriva injecțiilor SQL și asigurarea utilizării tipului de date corect.

Simplitate

Când folosim acest obiect, nu trebuie să aflăm specificul bazei noastre de date. Deoarece folosim o matrice pentru a ne transmite parametrii, nu este nevoie să scriem manual interogări de unire sau interogări imbricate, trebuie doar să creați o matrice de argumente și o instanță a clasei!

Modularitate

WP_Query vă permite să evitați utilizarea interogărilor SQL în cod, clasa folosește o matrice asociativă ca argument. Acest lucru vă permite să obțineți o mulțime de beneficii: puteți combina argumente din diferite locuri în cod, puteți rula o serie de funcții și le puteți manipula în tot felul de moduri.

Deci, să începem!

Bucla „Standard” în WordPress

Să ne uităm mai întâi la o buclă obișnuită și apoi să creăm aceeași buclă folosind WP_Query. Să presupunem că creăm un fișier category.php pentru tema noastră.

if (au_postări()):
în timp ce (have_posts() ):
bara() ;
?>



sfârşitul timpului;
altceva:
?>
Hopa, nu au fost găsite intrări!
endif ;
?>

Aceeași buclă folosind WP_Query:

$args = matrice ("cat" => 4 ) ;
$category_posts = new WP_Query($args) ;

if ($category_posts -> have_posts()):
while ($category_posts -> have_posts()):
$category_posts -> the_post () ;
?>



sfârşitul timpului;
altceva:
?>
Hopa, nu au fost găsite intrări!
endif ;
?>

După cum puteți vedea, la prima vedere nu este prea mare diferență! Să aruncăm o privire mai atentă la el:

Construirea de interogări

Pe pagina categoriei, vrem să obținem o listă de postări din acea categorie. Deoarece construim interogarea de la zero folosind WP_Query, trebuie să definim acest lucru noi înșine. Vom aprofunda un pic mai târziu în asta.

Crearea unei instanțe a clasei și interogări pentru mesaje

Folosind o instanță de clasă și o matrice de argumente, WP_Query va încerca să recupereze mesajele specificate.

Crearea unei bucle

Puteți utiliza orice funcții obișnuite, nu uitați să le utilizați ca metode obiect:

În loc de have_posts(), utilizare $category_posts->have_posts().
În loc de bara(), utilizare $category_posts->the_post().

După ce ați făcut totul de mai sus, puteți utiliza oricare dintre etichetele șablon pe care le cunoaștem și le iubim.

Dacă te uiți la asta mai detaliat, vei vedea că obiectul global $post deasemenea disponibil. Aceasta înseamnă că, dacă utilizați o buclă personalizată, lucrurile pot merge prost. Asigurați-vă că păstrați valoarea originală a obiectului $postși restabiliți-l după ciclu.

Daţi-i drumul...

Ușurința cu care putem crea bucle este evidentă, dar cum creăm de fapt interogări pentru înregistrări? Permiteți-mi să vă arăt o metodă obișnuită care este adesea folosită la crearea glisoarelor în teme comerciale.

Foarte des, utilizatorii temei dvs. doresc slidere grozave pe site-urile lor, dar pot fi puțin leneși când creează conținutul. Mulți utilizatori doresc, de asemenea, să arate postări viitoare care sunt programate să fie publicate. Să creăm o interogare pentru a prelua postările viitoare (adică nepublicate) care au o imagine.

$args = matrice (
"post_status" => "viitor" ,
"meta_query" => matrice (
matrice (
"key" => "_thumbnail_id" ,
"valoare" => "" ,
"compara" => "!="
)
) ;
$slider_posts = new WP_Query($args) ;
?>

have_posts () ) : ?>


have_posts () ): $slider_posts -> the_post () ?>




Cod scurt și complet de înțeles - simplu și frumos.

Valori implicite

Poate ați observat că nu am specificat numărul de înregistrări necesare în cererea mea. Câte mesaje sunt în listă? Și care este starea postării din prima solicitare pe care am făcut-o?

Valorile implicite sunt setate pentru multe dintre cele mai comune argumente. Iată câteva pe care nu trebuie să le specificați decât dacă doriți să le modificați:

postări_pe_pagină
În mod implicit, se utilizează valoarea specificată în parametrii site-ului pentru numărul de mesaje din pagină.

tip_post
Implicit este post.

post_status
Implicit este publica.

Lista completă a parametrilor o găsiți în documentație!

Matrice

În multe cazuri, va trebui să specificați mai multe valori pe care le poate lua argumentul. Și WP_Query vă permite să utilizați matrice pentru a vă ușura viața. Aici sunt cateva exemple:

Puteți folosi o matrice pentru post_status pentru a primi mesaje cu stări diferite. Rețineți că puteți utiliza linia orice pentru a primi mesaje cu tot felul de stări.

Lucrul cu metadate

Ai văzut deja asta WP_Query se ocupă excelent de metadatele - am folosit meta_queryîn al doilea exemplu, când am construit un glisor cu postări care au imagini.

Să ne imaginăm că creăm o temă WordPress care va fi folosită pentru un site web pentru închirierea unui apartament(e). Vom stoca apartamentele într-un tip de postare personalizat și vom folosi metadate pentru a stoca informații suplimentare. In acest fel putem obtine cu usurinta, de exemplu, toate apartamentele care pot gazdui patru sau mai multe persoane, sau cele care au balcon, sau doar apartamente pentru zi cu jacuzzi.

$args = matrice (
"post_type" => "apartament" ,
"meta_query" => matrice (
"relation" => "ȘI" ,
"=" => "="
)
) ;
?>

Pentru a afla mai multe despre parametrii care pot fi utilizați, consultați pur și simplu secțiunea Parametrii de câmp personalizat din documentația WP_Query.

Metode și proprietăți

Odată ce ați făcut o solicitare, puteți extrage o mulțime de informații din obiectul dvs. Puteți găsi o listă completă de „Metode și proprietăți” în documentație. Iată cele pe care îmi place să le folosesc cel mai des:

$interogare
Afișează șirul de interogare care este transmis obiectului $wp_query. Acest lucru este foarte util pentru depanarea în unele cazuri.

$query_vars
Afișează o matrice asociativă a argumentelor pe care le-ați transmis. Dacă faceți o mulțime de amestecări și potriviri înainte de a transmite argumente, acest instrument poate fi util pentru a verifica dacă totul este transmis corect.

$post
Conține înregistrările solicitate din baza de date.

$found_posts
Un lucru la îndemână care arată numărul total de elemente găsite (fără limita stabilită de argumentul posts_per_page).

Cu o mare putere vine o mare responsabilitate

WP_Query vă oferă o putere mare, dar are dezavantajele sale. Mulți oameni înnebunesc când realizează cât de ușor este să apelezi interogări peste tot.

Rețineți că cu cât sunt mai multe solicitări, cu atât este mai mare sarcina pe server. Când creați interogări complexe, este posibil să întâmpinați probleme cu memoria RAM de găzduire, care este probabil o resursă limitată pe care o aveți.

Asigurați-vă că interogarea implicită rulează pe fiecare pagină. Ce rost are să creezi o nouă interogare pentru a obține cele mai recente postări pe pagina de pornire, dacă există în mod implicit? Utilizați memoria cache a rezultatelor pentru a reduce încărcarea serverului.


Dacă aveți întrebări, vă recomandăm să utilizați