WP_Query Argumente Data

În această serie pe WP_Query, ați învățat cum să utilizați WP_Query pentru a crea interogări personalizate în fișierele sau pluginurile tematice.

Această parte a seriei vă va îndruma prin argumentele pe care le puteți utiliza pentru a crea interogări de date simple și complexe, pentru a afișa postări publicate pe, înainte, după sau între datele date.

Vă voi arăta ce parametri vă sunt disponibili și cum să le utilizați pentru a vă scrie întrebările. Dar mai întâi, un memento a modului în care lucrează 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
  • terminați: închiderea dacă și în timp ce etichetele și resetarea datelor postale

În practică, acest lucru va arăta mai degrabă după cum urmează:

have_posts ()) // Începeți cu buclă peste rezultatele interogării. în timp ce ($ query-> have_posts ()) $ query-> the_post (); // Conținutul rezultatelor mesajelor interogate merge aici.  // Restaurați datele postale originale. wp_reset_postdata (); ?>

Argumentele sunt ceea ce spune WordPress ce date să aducă din baza de date și sunt cele pe care le voi acoperi aici. Deci, tot ce ne concentrăm aici este prima parte a codului:

$ args = array (// Argumente pentru interogarea dvs.);

După cum puteți vedea, argumentele sunt conținute într-o matrice. Veți învăța cum să le codificați pe măsură ce lucrați prin acest tutorial.

Codificarea argumentelor dvs.

Există o modalitate specifică de a codifica argumentele în matrice, care este după cum urmează:

$ args = array ('parameter1' => 'valoare', 'parameter2' => 'valoare', 'parameter3' => 'valoare');

Trebuie să închideți parametrii și valorile lor în ghilimele simple, utilizați => între ele, și le separați cu o virgulă. Dacă obțineți acest lucru greșit, WordPress nu poate adăuga toate argumentele dvs. la interogare sau puteți obține un ecran alb.

Parametrii de date

De asemenea, puteți utiliza parametrii pentru a căuta postări cu o dată de publicare la o anumită dată. Puteți fi la fel de specific ca și dvs. cu datele, folosind ani și luni, de exemplu, pentru a recupera un număr de postări.

Puteți scrie un set simplu de argumente sau puteți utiliza date_query pentru a crea matrice imbricate și pentru a rula interogări mai complexe. Să începem cu argumentele mai simple.

Argumente simple de date

Parametrii pe care îi puteți utiliza pentru interogarea după dată sunt:

  • an (int): Anul cu patru cifre (de ex. 2015).
  • monthnum (int): Numărul lunii (de la 1 la 12).
  • w (int): Săptămâna anului (de la 0 la 53). Modul este dependent de "Start_of_week" opțiune pe care o puteți edita în pagina Setări din admin.
  • zi (int): Ziua lunii (de la 1 la 31).
  • ora (int): Oră (de la 0 la 23).
  • minut (int): Minute (de la 0 la 60).
  • al doilea (int): Al doilea (0 la 60).
  • m (int): Anul lunii (de ex. 201502).

Imaginați-vă că rulați un site de evenimente care utilizează data publicării pentru fiecare eveniment pentru a indica data de începere a evenimentului. Pentru a dori să afișați toate evenimentele, trecute și viitoare, care se întâmplă în 2015, iată argumentele de care aveți nevoie:

$ args = array ('post_type' => 'eveniment', 'post_status' => array ('future', 'publish'), 'year' => '2015');

Rețineți că am folosit viitor și publica pentru postarea postului, deoarece postările programate pentru o dată viitoare nu sunt interogate în mod implicit.

Sau dacă doriți să afișați automat evenimente care se întâmplă în acest an și să nu actualizați interogarea în fiecare an, ați putea obține mai întâi anul curent și apoi să îl transmiteți în argumentele dvs. de interogare:

$ current_year = the_date ('Y'); $ args = array ('post_type' => 'eveniment', 'post_status' => array ('future', 'publish'), 'year' => $ current_year);

Date complexe Argumente

Pentru a utiliza mai mulți parametri de date pentru a crea interogări mai complexe, utilizați date_query parametru. Acest lucru vă oferă acces la mai mulți parametri:

  • an (int): Anul cu patru cifre (de ex. 2015).
  • 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): Oră (de la 0 la 23).
  • minut (int): Minute (de la 0 la 59).
  • al doilea (int): Al doilea (0 la 59).
  • după (string / array): Data pentru preluarea posturilor după. 
  • inainte de (string / array): Data pentru preluarea posturilor înainte. 
  • inclusiv (boolean): Pentru după / înainte, dacă valoarea exactă ar trebui să fie potrivită sau nu.
  • comparaţie (şir): Un operator pe care îl utilizați pentru a compara datele din baza de date cu argumentele dvs. Valorile posibile sunt '=', '! =', '>', '> =', '<', '<=', 'CA', 'NU CA', 'ÎN', 'NU ÎN', 'ÎNTRE', "NU DINTRE", 'EXISTS', și 'NU EXISTA'.
  • coloană (şir): Coloana bazei de date pentru a interoga: implicit este 'POST_DATE'.
  • relație (şir): SAU sau ȘI, modul în care ar trebui comparate sub-tablourile. Valoarea implicită este ȘI.

date_query parametrul este formatat astfel:

$ args = array ('date_query' => array (array (// Argumentele merg aici)));

De asemenea, puteți crea mai multe matrice și puteți defini modul în care acestea vor fi comparate utilizând parametrul de relație. Exemplul de mai jos va returna interogări care se potrivesc cu argumentele din ambele tablouri:

$ args = array ('date_query' => array ('relație' => 'ȘI', array (// Argumentele intră aici), array (// Arguments go here.));

În timp ce codul de mai jos va prelua mesajele care se potrivesc cu argumentele fie în matrice (fie în ambele):

$ args = array ('date_query' => array ('relația' => 'OR', array (// Argumentele merg aici), array (// Arguments go here.));

Să ilustrăm acest lucru cu un exemplu. Să presupunem că lucrați la un site de colegiu și doriți să afișați postări din acest an academic. Anul universitar se desfășoară în perioada 1 septembrie 2014 - 31 august 2015, astfel încât trebuie să găsiți postări în lunile și anii în cauză:

$ args = array ('date_query' => array ('relația' => 'OR', array ('year' => '2014', ' array ('year' => '2015', 'month' => ('1, 2, 3, 4, 5, 6, 7, 8'))));

Rețineți că lună parametru ia un șir pentru argumentele sale, nu un matrice.

Parametrii înainte și după

O alternativă la exemplul de mai sus este definirea datelor anterioare și / sau după care doriți să afișați postări, utilizând inainte de și după parametrii. Acestea iau trei argumente:

  • an (şir): Acceptă orice an de patru cifre: gol în mod implicit.
  • lună (şir): Luna anului (1 la 12). Valoarea implicită este 12.
  • zi (şir): Ziua lunii (1 la 31). Implicit este ultima zi a lunii.

De asemenea, puteți utiliza un șir pentru dată, atâta timp cât este compatibil cu php-ul strtotime format.

Prin urmare, revenind la exemplul meu de afișare a postărilor pentru acest an universitar, am două opțiuni suplimentare. În primul rând, aș putea folosi o matrice imbricată cu parametrii anului și lunii:

$ args = array ('date_query' => array ('relație' => 'AND', array inclusiv '=> true), array (' înainte '=> array (' year '=>' 2015 ',' month '=>' 8 '),' inclusive '=> true)));

Există câteva lucruri de reținut aici:

  • Am folosit-o 'relație' => 'AND' deoarece posturile trebuie să fi fost publicate după data de începere și înainte de data de încheiere.
  • Pentru fiecare dintre matricele imbricate, le-am folosit 'inclusive' => true pentru a vă asigura că WordPress aduce mesaje publicate în perioada septembrie 2014 și august 2015.

De asemenea, aș putea scrie această interogare utilizând un șir pentru datele:

$ args = array ('date_query' => array (array ('după' => '31 august 2014', 'înainte' => '1 septembrie 2015';

Rețineți că datorită felului în care funcționează șirurile de date, este mai fiabil să utilizați datele exclusive. Acest lucru se datorează faptului că dacă utilizați un șir de date, acesta va fi convertit la ora 00:00 la acea dată. Deci, pentru a face să funcționeze, utilizați timpul în șirul dvs., sau faceți cum am făcut și folosesc ziua inainte de data la care doriți să afișați postări de la (și după data la care doriți să afișați postările până).

Altceva ce poți să faci cu parametrii de dată este afișarea mesajelor publicate astăzi. Revenind la site-ul meu de evenimente, să spunem că vreau să afișez un banner mare pe pagina mea de pornire în ziua în care se întâmplă un eveniment. Pot să scriu o interogare pentru aceasta și apoi să afișez detaliile evenimentului dacă se găsește unul. Iată argumentele:

$ args = array ('post_type' => 'eveniment', 'post_status' => array ('future', 'publish') , 'lună' => dată ('M'), 'zi' => dată ('D'))));

Utilizarea Data() funcția returnează data curentă - am folosit acest lucru de trei ori pentru a vă asigura că primesc ziua, luna și anul corect. Rețineți că am inclus și post_status argument pentru a se asigura că un eveniment care apare mai târziu astăzi este inclus.

rezumat

Uneori nu doriți doar să căutați toate postările publicate. Prin utilizarea funcției WP_Query , puteți crea interogări mult mai specifice pentru a afișa postările după dată, inclusiv postările publicate la o anumită dată, înainte de o dată, după o dată sau între o pereche de date.

date_query argumentele se combină cu alți parametri, cum ar fi post_status, care este acoperit în detaliu în altă parte a acestei serii.

Cod