Mastering WP_Query Introducere

Implicit, WordPress va rula o interogare pe fiecare pagină afișată de site-ul dvs., natura căreia va fi determinată de tipul de pagină vizionat. Deci, dacă este vizionată o pagină statică, WordPress execută o interogare pentru a afișa pagina cu ID-ul relevant, în timp ce în cazul în care o pagină de arhivă este vizionată, interogarea va prelua toate posturile din acea arhivă.

Dar uneori vrei să faci lucrurile puțin diferit. Fie în conținutul principal al paginii dvs., fie în altă parte a paginii (cum ar fi în bara laterală sau în subsol), este posibil să doriți să afișați anumite conținuturi care nu sunt transmise prin interogarea standard.

Vestea minunată este că WordPress face posibil acest lucru cu WP_Query clasă. Această clasă vă oferă un număr mare de parametri pe care îi puteți utiliza pentru a defini conținutul pe care doriți să îl transmiteți (care nu trebuie să se limiteze la postări) și apoi să scrieți o buclă care va arăta conținutul exact așa cum doriți.

În această serie de nouăzeci-parte despre Mastering WP_Query, Baris Unver și eu vă voi duce prin insulele și out-urile WP_Query astfel încât, odată ce ați terminat seria, veți putea să o utilizați într-o varietate de scenarii și să acordați atenție modului în care WordPress interoghează datele din baza de date a site-ului dvs..

În această introducere voi acoperi următoarele:

  • Ce este WP_Query?
  • De ce să folosiți WP_Query?
  • Probleme potențiale / ce să știți.

Ce este WP_Query??

WP_Query este o clasă furnizată de WordPress. Faptul că este o clasă înseamnă că, prin utilizarea acesteia, puteți accesa rapid variabilele, verificările și funcțiile care au fost codificate în acea clasă în WordPress core, fără a fi nevoie să vă faceți griji cu privire la scrierea codului însuși. Acest lucru face ca codul dvs. să fie mai eficient și mai fiabil.

Dacă doriți să înțelegeți exact cum WP_Query funcționează sub capotă, îi puteți vedea codul în include / query.php fişier.

WP_Query constă din patru elemente principale:

  • argumentele pentru interogare, folosind parametrii care vor fi detaliate în această serie
  • interogarea însăși
  • buclă, care va scoate conținut post, titluri sau orice doriți să afișați
  • 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 (); ?>

S-ar putea să vă definiți argumentele atunci când scrieți interogarea în sine, dar prefer să le definiți mai întâi, deoarece păstrează lucrurile în ordine.

Resetarea datelor postale

În exemplul de mai sus am adăugat wp_reset_postdata () după fiecare interogare. Acest lucru este important deoarece resetează interogarea înapoi la interogarea principală care se execută pe acea pagină. 

De exemplu, dacă utilizați WP_Query pentru a rula o interogare în bara laterală, folosind wp_reset_postdata () spune în mod eficient WordPress că suntem în continuare pe orice pagină este vizionată și că ar trebui să funcționeze cu interogarea implicită pentru acea pagină. 

Dacă nu faceți acest lucru, orice alte interogări care sunt difuzate pe pagină (inclusiv interogarea implicită) s-ar putea rupe, iar toate etichetele condiționate care verifică ce fel de pagină este vizionată nu vor funcționa.

De ce folosiți WP_Query?

Dacă nu ați utilizat WP_Query clasa înainte, s-ar putea să te întrebi de ce ar trebui să începi. Aici mă voi concentra pe două aspecte: de ce să folosim WP_Query peste alte metode de scriere a interogărilor personalizate și scenarii în care ați putea dori să le utilizați WP_Query.

De ce folosiți WP_Query peste alte metode?

WP_Query nu este singura metodă pentru crearea unei interogări personalizate. Există încă patru:

  • pre_get_posts
  • get_posts ()
  • get_pages ()
  • query_posts () (pe care trebuie să o eviți, așa cum voi explica)

Nu voi intra în detaliu cu privire la modul în care funcționează fiecare, dar este util să știm când sunt folosite:

  • pre_get_posts este un cârlig care modifică interogarea principală. Puteți să o utilizați cu o etichetă condiționată pentru a verifica dacă un anumit tip de pagină este vizionat (de exemplu, pagina de pornire) și apoi să îl utilizați pentru a modifica interogarea care se execută (de exemplu, pentru a elimina cele mai recente trei postări, afișarea acestora în altă parte a paginii). Este o modalitate foarte eficientă de a modifica interogarea principală și ar trebui să fie primul dvs. port de apel dacă aceasta este ceea ce doriți să faceți. Cu toate acestea, nu puteți să o utilizați pentru a crea o interogare complet nouă.
  • get_posts () și get_pages () sunt foarte asemănătoare, diferența principală fiind evidentă din numele lor. Aceste etichete șablon utilizează de fapt WP_Query clasa, astfel încât acestea să fie un alt mod de a face același lucru, dar adăugați un pas în plus, deoarece ei numesc WP_Query clasă în loc să o faceți direct. Puteți să le utilizați numai pentru a interoga mesajele sau paginile, în timp ce WP_Query ea însăși este mai puternică și vă permite să interogați aproape orice este ținut în baza dvs. de date.
  • query_posts () modifică interogarea principală, dar nu ar trebui să fie utilizată în pluginuri sau teme. Acest lucru se datorează faptului că elimină interogarea principală și începe din nou, înlocuind interogarea principală cu o nouă interogare. De asemenea, este predispus la erori, în special la paginare, este ineficient și va afecta timpul de încărcare a paginii. Dacă trebuie să modificați interogarea principală, utilizați pre_get_posts în schimb, și dacă doriți să creați o interogare complet nouă, utilizați WP_Query.

Diagrama de mai jos, lansată de Andrey "Rarst" Savchenko sub licență Creative Commons, are un sens în acest sens:

Când ați putea folosi WP_Query

Există multe scenarii când WP_Query vor veni în folosință și nu le pot acoperi pe toți, dar aici este o prezentare generală:

  • Pentru a adăuga o listă cu postări similare în postarea curentă - de exemplu, o listă cu toate postările din aceeași categorie.
  • Pentru a crea două bucle pe aceeași pagină: de exemplu, o pagină de întrebări frecvente cu titlurile de întrebări din partea de sus și conținutul de mai jos.
  • Pentru a crea o listă personalizată a postărilor recente din bara laterală sau de subsol a site-ului dvs., atunci când widgetul Mesaje recente nu face ceea ce aveți nevoie (sau preferați să-l codifici singur).
  • Pentru a crea interogări personalizate pentru taxonomii, utilizați mai multe taxonomii pentru a defini ce este afișat.
  • Pentru a interoga tipurile de posturi care nu sunt transmise prin interogarea implicită, cum ar fi atașamentele.
  • Pentru a crea pagini personalizate cu un număr de interogări pentru diferite tipuri de conținut, așa cum am făcut în acest exemplu de site pentru un client.

Unele avertismente

WP_Query clasa este minunată. Creez o mulțime de site-uri care au nevoie de interogări personalizate, așa că o folosesc frecvent. Dar nu vine fără dezavantajele sale. Iată câteva lucruri pe care trebuie să le cunoașteți:

  • Dacă tot ce doriți să faceți este să schimbați modul de afișare a postărilor pentru un anumit tip de conținut sau arhivă, nu utilizați WP_Query. În schimb, creați pur și simplu un fișier de șablon pentru acea arhivă sau tip de conținut și modificați buclă în acel fișier șablon.
  • Dacă doriți să afișați câteva postări mai mult sau mai puțin decât ar fi afișate în mod normal pe o pagină de arhivă (de exemplu, dacă nu apare o anumită categorie), nu utilizați WP_Query pentru a crea o interogare complet nouă. Folosiți în schimb pre_get_posts pentru a modifica interogarea principală, împreună cu o etichetă condiționată pentru a identifica exact unde vreți să o faceți.
  • Aveți grijă să rulați prea multe interogări pe o pagină. Ați putea crea teoretic o pagină cu sute de interogări personalizate, dar gândiți-vă doar la încărcarea serverului. Dacă aveți nevoie de mai mult de patru sau cinci interogări pe o pagină, vă recomandăm să creați pagini suplimentare.

rezumat

WP_Query clasa este un instrument puternic și extrem de util pentru crearea de interogări personalizate și pentru ca site-ul dvs. WordPress să se comporte exact așa cum doriți. După cum am văzut, sunt momente când ați folosi alte metode pentru a crea interogări personalizate, dar are o gamă largă de utilizări.

În restul seriei, vă vom duce prin detaliile despre modul de utilizare WP_Query și obțineți maximum de la ea.

Cod