Mastering WP_Query Bruke Loop

Som jeg skisserte i introduksjonen til denne serien, WP_Query klassen har fire hovedelementer:

  • Argumentene for spørringen, ved hjelp av parametere som vil bli dekket i detalj i denne serien
  • selve spørringen
  • sløyfen, som vil sende ut innhold, titler eller hva du vil vise
  • Etterbehandling: lukking hvis og mens koder og tilbakestilling av postdata

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.

Hvor Loop passer

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 ().

Loopens struktur

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.

Ta løkken videre: Kontrollerer innhold

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 '
    '; // Start looping over spørringsresultatene. mens ($ query-> have_posts ()) $ query-> the_post (); ?>
  • > "title ="">
  • '; // Gjenopprett originale innleggsdata. wp_reset_postdata (); ?>

Dette kontrollerer om spørringen har hentet noen innlegg, og i så fall åpner den ul element og løper deretter løkken.

Kjører ekstra løkker

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 '
    '; // Start looping over spørringsresultatene. mens ($ query2-> have_posts ()) $ query2-> the_post (); ?>
  • > "title ="">
  • '; // Gjenopprett originale innleggsdata. wp_reset_postdata (); ?>

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.
  • Som du kan se fra koden ovenfor, er sløyfen litt annerledes for hvert spørsmål. Den første utgiver det kjente bildet, tittelen og utsnittet, mens den andre kontrollerer om spørringen har innlegg, og i så fall åpner en 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.

Sammendrag

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.