Som jeg skisserte i introduksjonen til denne serien, WP_Query
klassen har fire hovedelementer:
I denne veiledningen vil jeg vise deg hvordan du bruker løkken med WP_Query
, inkludert de to viktigste måtene å strukturere sløyfen din og hvordan du bruker flere sløyfer.
Uten en sløyfe vises ingenting på siden din. Etter at WordPress har kjørt spørringen, bruker du argumentene du har definert, må den da bli fortalt hva du skal skrive ut fra dataene den hentes. Det er her sløyfen kommer inn.
Så løkken kommer etter spørringen din, og den bruker tre koder:
hvis ($ spørring-> har_poster ())
sjekker om det er noen innlegg.mens ($ query-> have_posts ())
gjentar løkken for hvert innlegg så lenge det er innlegg å hente.$ Query-> the_post ()
får tilgang til det aktuelle innlegget.Så dette er hvor sløyfen passer i WP_Query
klasse:
have_posts ()) // Start looping over spørringsresultatene. mens ($ query-> have_posts ()) $ query-> the_post (); // Innholdet i de forespurte postresultatene går her. // Gjenopprett originale innleggsdata. wp_reset_postdata (); ?>
Etter å ha kjørt løkken, er alt som er igjen å gjøre, ryddig med bruk av wp_reset_postdata ()
.
Måten din loop er strukturert vil avhenge av hvilke data du vil vise fra innlegget ditt. Her er en eksempelsløyfe som gir ut tittel, bilde og utdrag. Du vil bruke en sløyfe som dette på en arkivside.
have_posts ()) // Start looping over spørringsresultatene. mens ($ query-> have_posts ()) $ query-> the_post (); ?>> "title =""> "title ="">
Denne sløyfen viser nøyaktig hva jeg har beskrevet ovenfor: det uthevede bildet, tittelen og utsnittet.
Men noen ganger kan du legge til en overskrift før listen over innlegg, eller du vil kanskje legge dem inn i et inneholdende element. Hvis du bare har lagt til dette før sløyfen din, vil den bli utført, uansett om spørringen faktisk returnerte noen data, noe som betyr at du kan ha en overskrift med ingenting under det, eller noe unødvendig markup.
Dette er veldig enkelt å komme seg rundt ved å sette det innhegende elementet eller overskriften inne i din hvis
stikkord:
have_posts ()) echo ''; ekko ' '. __ ('Overskrift', 'tutsplus'). '
'; // Start looping over spørringsresultatene. mens ($ query-> have_posts ()) $ query-> the_post (); ?>> "title =""> "title =""> '; // Gjenopprett originale innleggsdata. wp_reset_postdata (); ?>
Her kan du se at jeg har sjekket om det er noen innlegg hentet av spørringen min, og hvis det er, har jeg åpnet et inneholdende element og lagt til en overskrift.
Dette er også nyttig hvis du vil sende resultatene av spørringen din som en liste. La oss si at jeg vil lage en liste over alle innlegg i en gitt kategori. De ul
elementet er ikke inne i sløyfen min fordi det ikke er relatert til ett bestemt innlegg, men jeg vil bare sende det ut hvis det er innlegg. Så jeg bruker dette:
'kategori-slug', 'post_type' => 'innlegg'); // Tilpasset søk. $ query = nytt WP_Query ($ args); // Sjekk at vi har søksmål. hvis ($ query-> have_posts ()) echo '
Dette kontrollerer om spørringen har hentet noen innlegg, og i så fall åpner den ul
element og løper deretter løkken.
Det er viktig å være oppmerksom på at mens du kan bruke WP_Query
å kjøre mer enn en sløyfe, må du nullstille postdataene og starte en andre forekomst av WP_Query
å gjøre dette. Dette skyldes at hver av dine looper vil utgjøre data basert på forskjellige argumenter.
Dette eksemplet viser utsnittet og det kjente bildet for det første innlegget og deretter bare tittelen på hvert påfølgende innlegg:
'innlegg', 'posts_per_page' => '1'); // Første tilpassede spørringen. $ query1 = ny WP_Query ($ args1); // Sjekk at vi har søksmål. hvis ($ query1-> have_posts ()) // Start looping over spørringsresultatene. mens ($ query1-> have_posts ()) $ query1-> the_post (); ?>> "title =""> "title =""> '1', 'post_type' => 'innlegg'); // Second custom query. $ query2 = ny WP_Query ($ args2); // Sjekk at vi har søksmål. hvis ($ query2-> have_posts ()) echo '
Jeg har brukt to sentrale argumenter her:
'posts_per_page' => '1'
, brukes med det første spørsmålet, utgir bare det siste innlegget.'offset' = '1'
, brukes med det andre spørsmålet, hopper over det første innlegget, og sikrer at det ikke gjentas i listen nedenfor.ul
element og omslutter hver posttittel i a li
element og en lenke til siden.Du vil også merke at jeg brukte wp_reset_postdata ()
etter begge løkkene. Hvis jeg ikke hadde gjort dette, ville den andre sløyfen fremdeles sende data fra den første.
Uten en løkke, WP_Query
gjør egentlig ikke veldig mye. Sløyfen er koden du bruker til å vise dataene som WordPress har hentet fra databasen basert på spørringsargumenter.
Som jeg har vist, er det noen variasjoner på løkken. En enkel sløyfe vil bare sende alle innlegg i rekkefølgen du har angitt i søkeforespørsmålene dine (eller etter dato i synkende rekkefølge som standard). Hvis du skiller hvis ($ spørring-> har_poster ())
og mens ($ query-> have_posts ())
, Du kan sette inn ekstra merking utenfor sløyfen din, men bare hvis søket ditt har returnert data. Og til slutt, ved å angi alternative argumenter og bruk wp_reset_postdata ()
etter hver løkke kan du bruke WP_Query
mer enn en gang for å lage flere sløyfer på siden din.