După cum am subliniat în introducerea acestei serii, WP_Query
clasa are patru elemente principale:
În acest tutorial vă voi arăta cum să folosiți buclă cu WP_Query
, inclusiv cele două moduri principale de structurare a buclă și modul de utilizare a mai multor bucle.
Fără o buclă, nimic nu va fi afișat pe pagina dvs. După ce WordPress a executat interogarea, folosind argumentele pe care le-ați definit, trebuie să i se spună ce trebuie să transmită din datele pe care le-a descărcat. Aici intră buclele.
Așa că bucla vine după interogarea dvs. și utilizează trei etichete:
dacă ($ query-> have_posts ())
verifică dacă există postări.în timp ce ($ query-> have_posts ())
repetă buclă pentru fiecare post, atâta timp cât există postări de recuperat.$ Query-> the_post ()
accesează postul respectiv.Deci aici este locul unde buclele se potrivesc WP_Query
clasă:
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 (); ?>
După ce ați executat buclele, tot ce trebuie să faceți este să folosiți ordinele wp_reset_postdata ()
.
Modul în care este structurat buclă dvs. va depinde de datele pe care doriți să le afișați din postarea dvs. Iată o buclă de exemplu care scoate titlul postului, imaginea recomandată și un extras. Ați folosi o buclă ca aceasta pe o pagină de arhivă.
have_posts ()) // Începeți cu buclă peste rezultatele interogării. în timp ce ($ query-> have_posts ()) $ query-> the_post (); ?>> "title ="„> "title ="„>
Această bucla afișează exact ceea ce am descris mai sus: imaginea, titlul și fragmentul.
Dar, uneori, ați putea dori să adăugați o poziție înaintea listei dvs. de postări sau ați putea dori să le atașați pe toate într-un element care conține. Dacă ați adăugat pur și simplu acest lucru în fața buclă dvs., acesta ar fi emis, indiferent dacă interogarea a returnat toate datele, ceea ce înseamnă că ați putea avea o rubrică fără nimic sub ea sau unele marcări inutile.
Acest lucru este foarte ușor pentru a obține în jur prin punerea elementul de închidere sau poziția în interiorul dvs. dacă
etichetă:
have_posts ()) echo '„; echo " ". __ ("Rubrică", "tutsplus"). '
„; // Începeți cu buclă peste rezultatele interogării. în timp ce ($ query-> have_posts ()) $ query-> the_post (); ?>> "title ="„> "title ="„> „; // Restaurați datele postale originale. wp_reset_postdata (); ?>
Aici puteți vedea că am verificat dacă există mesaje preluate de interogarea mea și, dacă există, am deschis un element care conține și a adăugat o rubrică.
Acest lucru este de asemenea util dacă doriți să afișați rezultatele interogării dvs. ca listă. Să presupunem că vreau să creez o listă cu toate postările dintr-o anumită categorie. ul
elementul nu este în interiorul meu bucla, deoarece nu se referă la un anumit post, dar vreau doar să-l de ieșire, dacă există posturi. Deci folosesc acest lucru:
'category-slug', 'post_type' => 'post'); // Interogare personalizată. $ query = noua valoare WP_Query ($ args); // Verificați că avem rezultate de interogare. dacă ($ query-> have_posts ()) echo '
Aceasta verifică dacă interogarea a preluat orice postare și, dacă da, deschide ul
element și apoi execută bucla.
Este important să fiți conștienți că în timp ce puteți utiliza WP_Query
pentru a rula mai mult de o buclă, trebuie să resetați datele postului și să începeți oa doua instanță de WP_Query
pentru a face acest lucru. Acest lucru se datorează faptului că fiecare dintre buclele dvs. va transmite date pe baza unor argumente diferite.
Acest exemplu afișează extrasul și imaginea recomandată pentru prima postare și apoi doar titlul fiecărei postări ulterioare:
'post', 'posts_per_page' => '1'); // Prima interogare personalizată. $ query1 = noul WP_Query ($ args1); // Verificați că avem rezultate de interogare. dacă ($ query1-> have_posts ()) // Începeți cu buclă peste rezultatele interogării. în timp ce ($ query1-> have_posts ()) $ query1-> the_post (); ?>> "title ="„> "title ="„> '1', 'post_type' => 'post'); // A doua interogare personalizată. $ query2 = noul WP_Query ($ args2); // Verificați că avem rezultate de interogare. dacă ($ query2-> have_posts ()) echo '
Am folosit două argumente cheie aici:
'posts_per_page' => '1'
, folosit cu prima interogare, scoate doar cel mai recent post.'offset' = '1'
, folosit cu cea de-a doua interogare, sare peste primul post, asigurându-se că nu se repetă în lista de mai jos.ul
element și include fiecare titlu post într - un Li
element și un link către pagina sa.Veți observa, de asemenea, că am folosit wp_reset_postdata ()
după ambele bucle. Dacă n-aș fi făcut-o, cea de-a doua buclă va transmite în continuare date de la prima.
Fără o buclă, WP_Query
nu prea face foarte mult. Bucla este codul pe care îl utilizați pentru a afișa datele pe care WordPress le-a preluat din baza de date pe baza argumentelor interogării.
Așa cum am demonstrat, există câteva variații în buclă. O buclă simplă va afișa toate postările în ordinea specificată în argumentele interogării (sau în ordine descrescătoare în ordine descrescătoare). Dacă separați dacă ($ query-> have_posts ())
și în timp ce ($ query-> have_posts ())
, puteți introduce marcări suplimentare în afara buclă dvs., dar numai dacă interogarea dvs. a returnat datele. Și în sfârșit, prin specificarea argumentelor alternative și a utilizării wp_reset_postdata ()
după fiecare buclă, puteți folosi WP_Query
de mai multe ori pentru a crea mai multe bucle pe pagina dvs..