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:
WP_Query
?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:
Î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.
Î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.
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
.
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:
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ă:
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:
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.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. 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.