WP_Query Argumente Status, Order și Pagination

În această parte a seriei despre Mastering WP_Query, veți afla despre unele dintre argumentele pe care le puteți utiliza cu WP_Query clasa, si anume pentru:

  • stare
  • Ordin
  • paginare

Puteți utiliza aceste argumente pentru a prelua postările programate din baza de date, pentru a interacționa cu atașamentele, pentru a modifica modul în care sunt comandate mesajele și la ce le ordonă, pentru a specifica numărul de postări afișate și multe altele

Dar, înainte de a putea face acest lucru, trebuie să înțelegeți cum funcționează 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 stare

După cum veți ști dacă ați transformat vreodată statutul unei postări de la Proiect la publicat sau poate îl puneți în coșul de gunoi, WordPress atribuie o stare fiecărei postări. Puteți utiliza funcția post_status parametru pentru a căuta postări cu una sau mai multe stări.

Argumentele disponibile sunt:

  • publica: O postare sau o pagină publicată.
  • in asteptarea: Mesajul este în așteptarea examinării.
  • proiect: Un post în starea de proiect.
  • auto-proiect: Un post nou creat, fără conținut.
  • viitor: Un post de publicat în viitor.
  • privat: Nu este vizibil pentru utilizatorii care nu sunt conectați.
  • moşteni: O revizuire.
  • Gunoi: Postul este în trashbin.
  • orice: Returnează orice stare, cu excepția celor din posturile postate cu 'Exclude_from_search' setați la adevărat (adică. Gunoi și auto-proiect).

Dacă nu specificați o stare în argumentele interogării, WordPress va implicit să publica; dacă utilizatorul curent este conectat, acesta va include, de asemenea, postări cu statut de privat. Dacă executați o interogare în paginile de administrare, WordPress va include, de asemenea, stările protejate, care sunt viitorproiect și in asteptarea în mod implicit.

Deci, să presupunem că rulați un site de evenimente și că utilizați un tip de eveniment personalizat, utilizând data publicării ca fiind data la care are loc evenimentul. Implicit, WordPress nu va afișa niciun eveniment care nu sa întâmplat încă: deși le-ați programat, data planificată este în viitor, astfel încât starea lor de postare să fie viitoare.

Pentru a face acest lucru pur și simplu utilizați aceste argumente:

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

Aceasta va afișa numai acele evenimente care nu s-au produs încă, deoarece acestea vor avea publica stare. Dar, dacă doriți să afișați evenimente care s-au întâmplat, puteți utiliza o serie de stări postate pentru a include mai multe:

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

 post_status parametrul este esențial atunci când cereți atașamente. Acest lucru se datorează faptului că au un statut de moşteni, nu publica. Deci, pentru a interoga toate atașamentele, ați folosi acest lucru:

$ args = array ('post_type' => 'atașament', 'post_status' => 'moșteni');

Alternativ, ați putea înlocui moşteni cu orice care ar avea același efect.

Ordine Parametri

Există doi parametri pe care îi folosiți pentru a comanda postările preluate de WP_Query: Ordin și orderby. După cum v-ați aștepta, Ordin definește ordinea în care posturile vor fi transmise în buclă și orderby definește câmpul din baza de date pe care vor fi sortate.

Să începem să ne uităm la argumentele pentru Ordin.

Parametrul comenzii

Există doar două argumente pe care le puteți utiliza pentru aceasta:

  • ASC: ordinea ascendentă de la cele mai joase la cele mai înalte valori (1, 2, 3; a, b, c).
  • DESC: ordine descrescătoare de la valorile cele mai ridicate la cele mai scăzute (3, 2, 1; c, b, a).

Acestea sunt destul de explicative. Dacă nu includeți un argument pentru Ordin, WordPress va porni automat DESC.

Parametrul comandat

Puteți să vă sortați postările după o serie de domenii:

  • nici unul: Nici o comandă (disponibilă în versiunea 2.8).
  • ID-ul: Ordonați după id post. Rețineți capitalizarea.
  • autor: Ordonează după autor.
  • titlu: Ordonați după titlu.
  • Nume: Ordonați după post slug.
  • tip: Ordonați după tipul postării.
  • Data: Ordonează după dată.
  • modificată: Ordonați după ultima dată modificată.
  • mamă: Ordonați după poștă / pagină id părinte.
  • Rand: Ordine aleatorie.
  • COMMENT_COUNT: Ordonați după numărul de comentarii.
  • menu_order: Comandați după ordinea paginilor. Folosit cel mai des pentru Pagini (folosind valoarea pe care o adăugați la metabox în ecranul Editare pagină) și pentru atașamente (folosind câmpurile întregi din dialogul Inserare / Încărcare galerie media), dar ar putea fi utilizat pentru orice tip de post cu menu_order activat.
  • meta_value: Sortați după valoarea unei taste meta (sau a câmpului personalizat). Acest lucru funcționează numai dacă includeți și meta_key parametru în argumentele dvs. Valorile Meta sunt sortate în ordine alfabetică și nu numeric (deci 34 vor veni înainte de 4, de exemplu). 
  • meta_value_num: Ordonați după valoarea meta numerică. Ca și în cazul meta_value, trebuie să includeți și a meta_key argument în interogarea dvs..
  • postează în: Păstrați ordinea post ID oferită în postează în mulțime.

Valoarea implicită este Data, adică data la care a fost publicată o postare.

De exemplu, dacă doriți să sortați postările după titlu în ordine crescătoare, ați folosi aceste argumente:

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

Comandarea pe câmpuri multiple

Nu trebuie să rămâi la un singur câmp pentru a sorta postările tale. Pentru a sorta după mai multe câmpuri, folosiți un matrice cu orderby parametru și (opțional) cu Ordin dacă doriți să sortați fiecare câmp într-o ordine diferită.

Deci, să presupunem că aveți un câmp particularizat pe care doriți să îl utilizați pentru sortarea într-un site de comerț electronic. Puteți sorta după evaluare și apoi titlu, atât în ​​ordine crescătoare, astfel:

$ args = array ('orderby' => array ('meta_value_num', 'title'), 'comanda' => 'ASC', 'meta_key' => 'rating');

Rețineți că l-am inclus meta_key argument pentru a lăsa WordPress să știe domeniul pe care îl folosesc. Faceți asta din cauza modului în care WordPress stochează metadatele postate: nu în wp_posts tabel, dar în wp_postmeta masa.

Dar dacă ați vrea să ordonați după clasificare în ordine descrescătoare și apoi titlu în ordine crescătoare? Pur și simplu utilizați o altă matrice:

$ args = array ('orderby' => array ('meta_value_num', 'title'), 'comanda' => array ('DESC', 'ASC'), 'meta_key' => 'rating');

De asemenea, puteți sorta după mai multe câmpuri atunci când nu utilizați metadate postare, de exemplu pentru a sorta după tipul postării și apoi data:

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

Aceasta ar fi sortat după tip de post în ordine crescătoare și apoi în fiecare tip post, după dată în ordine descrescătoare.

Parametrii de paginare

Următorul set de parametri la care se ajunge este pentru paginare. Acestea vă ajută să definiți câte mesaje vor fi interogate și cum va funcționa paginarea la ieșire.

Parametrii disponibili sunt:

  • nopaging (boolean): Afișați toate postările sau utilizați paginarea. Valoarea implicită este 'fals', adică folosiți paginarea.
  • posts_per_page (int): Numărul de postări care trebuie afișate pe pagină.
  • posts_per_archive_page (int): Numărul de postări de afișat pe pagină - numai pe paginile de arhivă.
  • ofset (int): Numărul de posturi către deplasa sau treci peste.
  • Paged (int): Pagina din arhivă din care se afișează mesajele.
  • pagină (int): Numărul de pagini pentru o pagină frontală statică. Afișați postările care ar apărea în mod normal la pagina X a unei pagini frontale statice.
  • ignore_sticky_posts (boolean): Ignora stickiness post-default fals.

Să aruncăm o privire la câteva exemple. 

Numărul de posturi și posturile compensatorii

De exemplu, pentru a afișa cele mai recente cinci postări:

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

Sau pentru a afișa cinci postări recente, cu excepția celei mai recente:

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

Rețineți că, deși preluați mesaje din cele șase cele mai recente postări din baza de date, utilizați în continuare 'posts_per_page' => '5' deoarece acesta este numărul de posturi care vor fi trimise.

Dacă faceți acest lucru mai departe, puteți scrie două interogări: una pentru a afișa cel mai recent post și o secundă pentru a afișa încă zece postări, cu excepția postării:

$ args = array ('posts_per_page' => '1'); // Interogare și buclă mergeți aici, precum și resetarea postărilor. $ args = array ('posts_per_page' => '10', 'offset' => '1'); // A doua interogare, buclă și resetare mergeți aici.

Puteți utiliza, de asemenea posts_per_page a afișa toate posturi:

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

Postări lipicioase

În mod normal, mesajele lipicioase vor apărea mai întâi în orice interogare: dacă doriți să o înlocuiți, utilizați ignore_sticky_posts:

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

Argumentele de mai sus vor returna cele mai recente cinci posturi, indiferent dacă sunt lipicioase sau nu.

Rețineți că dacă doriți să afișați doar postări lipicioase, va trebui să utilizați get_option () și funcția postează în argument după cum urmează:

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

Cele de mai sus ar afișa ultimele cinci mesaje lipicioase: în cazul în care există mai puțin de cinci (de ex. Trei) mesaje lipicioase, acesta nu va afișa mesaje nealimentare, ci doar cele mai recente trei postări lipicioase.

Paginare în arhive

Pe lângă definirea numărului de postări extrase din baza de date, puteți utiliza și parametrii de paginare pentru a defini modul în care postările rezultate vor fi paginate în paginile de arhivă și de căutare.

De exemplu, pe o pagină de arhivă puteți folosi acest cod pentru a afișa 20 de postări pe pagină în arhivă:

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

Notă: posts_per_archive_page argument va suprascrie posts_per_page.

De asemenea, puteți alege să ieșiți doar paginile care ar apărea pe o anumită pagină în pagini paginate. De exemplu, dacă doriți să afișați cele 20 de postări care ar apărea pe pagina a treia din exemplul de mai sus, ați folosi acest lucru:

$ args = array ('posts_per_archive_page' => '20', 'paged' => '3');

O modalitate alternativă de interogare a acelorași postări ar fi utilizarea ofset argument:

$ args = array ('posts_per_page' => '20', 'offset' => '40');

Acest lucru sare peste primele 40 de postări (care ar fi pe primele două pagini de arhivă) și va aduce următoarele 20 de postări (care ar fi pe cea de-a treia pagină de arhivă.) Unul din lucrurile pe care le place despre WordPress este modul în care vă oferă adesea mai mult decât o modalitate de a realiza ceva!

De asemenea, puteți să dezactivați complet paginarea, pentru a vă asigura că toate postările vor apărea pe aceeași pagină:

$ args = array ('nopaging' => true);

rezumat

WP_Query vă oferă o mulțime de flexibilități atunci când este vorba despre stabilirea numărului de postări pe care doriți să le interogați, în ce ordine doriți să le afișați și despre starea postării pe care doriți să o afișați.

Unele dintre aceste argumente sunt esențiale pentru interogarea anumitor tipuri de mesaje (de exemplu 'post_status' => 'moștenit' pentru atașamente), în timp ce altele vă dau mai mult control asupra felului în care se execută interogările dvs..

Prin utilizarea acestor parametri puteți crea interogări personalizate care fac mult mai mult decât simpla expunere a celor mai recente postări publicate.

Cod