Språk: English • Français • Italiano • Loop 日本語 Português do Brasil • Русский • 中文(简体) • 中文(繁) • (Legg til ditt språk)
Loop er PHP-kode som brukes av WordPress for å vise innlegg. Ved Hjelp Av Loopen behandler WordPress hvert innlegg som skal vises på den nåværende siden, og formaterer det i henhold til hvordan det samsvarer med spesifiserte kriterier i Loopkodene. ENHVER HTML eller PHP-kode i Loopen vil bli behandlet på hvert innlegg.
Når wordpress-dokumentasjon sier «denne taggen må være Innenfor Sløyfen», for eksempel for spesifikke Malkoder eller plugins, vil taggen gjentas for hvert innlegg. Sløyfen viser for eksempel følgende informasjon som standard for hvert innlegg:
- Tittel (the_title ())
- Tid (the_time ())
- Kategorier (the_category ()).
du kan vise annen informasjon om hvert innlegg ved hjelp av de riktige Malkodene eller (for avanserte brukere) ved å gå til $post-variabelen, som er angitt med gjeldende innleggsinformasjon mens Sløyfen kjører.
for en nybegynners titt på Loopen, se Loopen i Aksjon.
Bruke Sløyfen
Sløyfen skal plasseres i Temaets indeks.php og I Andre Maler som brukes til å vise postinformasjon.
Sørg For å inkludere kallet for topptekstmalen øverst I Temaets maler. Hvis Du bruker Sløyfen i ditt eget design (og ditt eget design er ikke en mal), sett WP_USE_THEMES til false:
<?php define( 'WP_USE_THEMES', false ); get_header(); ?>
sløyfen starter her:
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
og slutter her:
<?php endwhile; else : ?><p><?php esc_html_e( 'Sorry, no posts matched your criteria.' ); ?></p><?php endif; ?>
DETTE bruker PHPS alternative syntaks for kontrollstrukturer, og kan også uttrykkes som:
<?php if ( have_posts() ) {while ( have_posts() ) {the_post(); //// Post Content here//} // end while} // end if?>
Loop Eksempler
Stil Innlegg Fra Noen Kategori Annerledes
dette eksemplet viser hvert innlegg Med Sin Tittel (som brukes som en link Til Innleggets Permalink), Kategorier Og Innhold. Det tillater også innlegg i en kategori Med Kategori ID ‘3’ for å bli stylet annerledes. For å oppnå dette, brukes Malkoden In_category (). Les kommentarene nøye for å se hva hver del av koden gjør.
Merk: ALL HTML-kode må være utenfor <?php ?> etiketter. OG PHP-kode (selv ting så enkle som krøllete braces: } ) må være inne i <?php ?> etiketter. Du kan starte og stoppe blokker AV PHP-kode for å interspere HTML-kode i if og else-setninger, som vist i eksemplet ovenfor.
Ekskluder Innlegg Fra En Kategori
dette eksemplet viser hvordan du skjuler en Bestemt Kategori eller Kategorier fra å bli vist. I Dette tilfellet er innlegg Fra Kategori 3 og 8 ekskludert. Eksemplet er annerledes enn eksemplet ovenfor ved at det gjør en endring i selve spørringen.
Merk: hvis du bruker dette eksemplet for hovedsiden din, bør Du bruke en Annen Mal for Kategoriarkivene dine; Ellers vil WordPress ekskludere alle innlegg I Kategori 3 og kategori 8, selv når Du ser På Det Kategoriarkivet! Men hvis du vil bruke samme malfil, kan du unngå dette ved å bruke is_home () – taggen for å sikre at innlegg Fra Kategori 3 Og Kategori 8 bare utelukkes fra hovedsiden:
...<?php if ( is_home() ) {$query = new WP_Query( 'cat=-3,-8' );if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); } else {...?>...
det er Andre Betingede Koder som kan brukes til å kontrollere utdataene avhengig av om en bestemt tilstand er sant med hensyn til den forespurte siden.
Objektorientering
Sløyfer er en kombinasjon av objektorientert og global oppførsel. Dette er forvirrende først.
de to viktige globale variablene for sløyfer er:
- $wp_query som er et objekt av klasse WP_Query, holder ET wp-databasespørringsresultat blant annet $wp_query->innlegg, en rekke individuelle wp_posts.
- $post som er det nåværende objektet i klassen WP_Post
Husk: alle malkodene stole på $post global variabel som standard, og $ post global variabel er satt / endret av the_post (), som får dataene fra $ wp_query global variabel . $post er også satt / endret Av WP_Query:: the_post() som brukes i sekundære sløyfer.
Flere Løkker
denne delen omhandler avansert Bruk Av Sløyfen. Det er litt teknisk, men ikke la det skremme deg. Vi starter med et enkelt eksempel og jobber derfra. Med litt sunn fornuft, tålmodighet og entusiasme kan du også gjøre flere løkker.
Først av, hvorfor vil man bruke flere løkker? Generelt er svaret at du kanskje vil gjøre noe med en gruppe innlegg, og gjøre noe annerledes enn en annen gruppe innlegg, men vis begge gruppene på samme side. «Noe» kan bety nesten hva som helst; DU er bare begrenset AV PHP ferdigheter og din fantasi.
vi vil komme inn eksempler nedenfor, men først bør du lese om det grunnleggende. Ta en titt på den grunnleggende Sløyfen. Den består av:
<?php if ( have_posts() ) : ?><?php while ( have_posts() ) : the_post(); ?> <!-- do stuff ... --><?php endwhile; ?><?php endif; ?>
Litt til Side På Gjøre ting: i dette eksemplet er det bare en plassholder for en haug med kode som bestemmer hvordan du formaterer og viser hvert innlegg på en side. Denne koden kan endres avhengig av hvordan Du Vil At WordPress skal se ut. Hvis Du ser På Kubrick-temaets indeks.php gjøre ting delen ville være alt under:
<?php while ( have_posts() ) : the_post(); ?>
til ovenfor:
<?php comments_popup_link( 'No Comments "', '1 Comment "', '% Comments "' ); ?>
en forklaring på koderne der ute:have_posts() og the_post() er praktiske wrappers rundt det globale $wp_query-objektet, som er der all handlingen er. $Wp_query kalles i blog header og fed query argumenter som kommer inn GJENNOM GET OG PATH_INFO. $Wp_query tar argumentene og bygger og utfører EN DB-spørring som resulterer i en rekke innlegg. Denne matrisen lagres i objektet og returneres også tilbake til bloggoverskriften der den er fylt inn i global $ posts array (for bakoverkompatibilitet med gamle postløkker).
Når WordPress er ferdig med å laste bloggoverskriften og faller ned i malen, kommer Vi til vår Postsløyfe. Den have_posts () bare kaller inn $wp_query – > have_posts () som sjekker en loop teller for å se om det er noen innlegg igjen i innlegget array. Og the_post () kaller $wp_query – > the_post () som fremmer løkketelleren og setter opp den globale $post-variabelen samt alle de globale postdataene. Når vi har oppbrukt løkken, vil have_posts () returnere false og vi er ferdige.
Loop Eksempler
Nedenfor er tre eksempler på bruk av flere sløyfer. Nøkkelen til å bruke flere løkker er at $wp_query bare kan kalles en gang. For å omgå dette er det mulig å gjenbruke spørringen ved å ringe rewind_posts () eller ved å opprette et nytt spørringsobjekt. Dette er dekket i eksempel 1. I eksempel 2 dekkes bruk av en variabel til å lagre resultatene av en spørring. Til slutt bringer’ multiple loops in action ‘ en rekke ideer sammen for å dokumentere en måte å bruke flere looper på for å fremme innlegg av en bestemt kategori på bloggens hjemmeside.
Flere Looper Eksempel 1
for å gå gjennom samme spørring en gang til, ring rewind_posts(). Dette vil tilbakestille sløyfetelleren og tillate deg å gjøre en annen sløyfe.
<?php rewind_posts(); ?> <?php while ( have_posts() ) : the_post(); ?><!-- Do stuff... --><?php endwhile; ?>
hvis du er ferdig med innleggene i den opprinnelige spørringen, og du vil bruke en annen spørring, kan du gjenbruke $wp_query-objektet ved å ringe query_posts() og deretter looping tilbake gjennom. Query_posts () vil utføre en ny spørring, bygge et nytt innlegg array, og tilbakestille loop telleren.
hvis du trenger å beholde den opprinnelige spørringen rundt, kan du opprette et nytt spørringsobjekt.
Flere Looper Eksempel 2
En annen versjon av å bruke flere Looper tar en annen takk for å komme seg rundt manglende evne til å bruke have_posts () og the_post (). For å løse dette må du lagre den opprinnelige spørringen i en variabel, og tilordne den deretter med den andre Sløyfen. På denne måten kan du bruke alle standardfunksjonene som er avhengige av alle globals.
For eksempel:
Merk: i PHP 5 refereres objekter med operatoren» = clone «i stedet for» = » som I PHP 4. For Å gjøre Eksempel 2 arbeid I PHP 5 må du bruke følgende kode:
dette andre eksemplet fungerer Imidlertid ikke I WordPress 2.1.
Flere Looper i Aksjon
den beste måten å forstå hvordan du bruker flere looper er å faktisk vise et eksempel på bruken. Kanskje den vanligste bruken av flere løkker er å vise to (eller flere) lister over innlegg på en side. Dette gjøres ofte når en webmaster ønsker å inneholde ikke bare det aller siste innlegget skrevet, men også innlegg fra en bestemt kategori.
La alle formatering og CSS problemer til side, la oss anta at vi vil ha to lister over innlegg. En som ville liste de siste innleggene (standard 10 innlegg sist lagt til), og en annen som ville inneholde bare ett innlegg fra kategorien ‘utvalgt’. Innlegg i kategorien ‘utvalgt’ skal vises først, etterfulgt av den andre listen over innlegg (standarden). Fangsten er at ingen innlegg skal vises i begge kategorier.
Trinn 1. Få bare ett innlegg fra kategorien ‘utvalgt’.
på engelsk vil koden ovenfor lese:
Sett $my_query lik resultatet av å spørre alle innlegg der kategorien er navngitt og forresten, få meg bare ett innlegg. Sett også variabelen $do_not_duplicate lik ID-nummeret til det enkle innlegget som returneres. Husk at Gjør ting-linjen representerer alle formateringsalternativene som er knyttet til innlegget hentet.
Merk at vi trenger verdien av $do_not_duplicate i neste trinn for å sikre at det samme innlegget ikke vises i begge lister.
Trinn 2. Den andre sløyfen, få x siste innlegg (unntatt en).
følgende kode får x siste innlegg (som definert I WordPress preferanser) lagre den som allerede vises fra den første sløyfen og viser dem i Henhold Til Gjøre ting.
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue;?><!-- Do stuff... --><?php endwhile; endif; ?>
på engelsk vil koden ovenfor lese:
Få alle innlegg, hvor et innlegg er lik $do_not_duplicate, gjør bare ingenting (fortsett), ellers vis alle de andre innleggene i Henhold Til Å gjøre ting. Også oppdatere cache slik at tagging og søkeord plugins spille fint. Recall, $do_not_duplicate variabel inneholder IDEN til innlegget som allerede vises.
Sluttresultatet
Her er hva det endelige kodestykket ser ut uten formatering:
sluttresultatet vil være en side med to lister. Den første listen inneholder bare ett innlegg – det siste innlegget fra kategorien ‘funksjon’. Den andre listen vil inneholde x siste innlegg (som definert I WordPress preferanser) bortsett fra innlegget som allerede er vist i den første listen. Så, når funksjonsposten er erstattet med en ny, vises den forrige funksjonen i standard postliste nedenfor (avhengig av hvor mange innlegg du velger å vise og på postfrekvensen). Denne teknikken (eller lignende) har blitt brukt av mange i forbindelse med kunnskap Om Malhierarkiet for å skape et annet utseende for hjemmet.php og indeks.php. Se tilknyttede ressurser nederst på denne siden.
Merk For Flere Innlegg I Den Første Kategorien
hvis posts_per_page=2 eller mer, må du endre koden litt. Variabelen $do_not_duplicate må endres til en matrise i motsetning til en enkelt verdi. Ellers vil den første sløyfen fullføres, og variabelen $do_not_duplicate vil bare være iden til det siste innlegget. Dette vil resultere i dupliserte innlegg i den andre sløyfen. For å fikse problemet erstatt
med
Merk at «posts_per_page» kan være et hvilket som helst tall.Dette endrer $do_not_duplicate i en matrise. Erstatt
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue; ?>
med
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( in_array( $post->ID, $do_not_duplicate ) ) continue; ?>
der du fortsetter mønsteret for hva posts_per_page er satt til (2 i dette tilfellet).
Alternativt kan du sende hele $do_not_duplicate array til $wp_query og bare oppføringer som samsvarer med dine kriterier vil bli returnert:
<?php query_posts( array( 'post__not_in' => $do_not_duplicate ) );if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
Legg Merke til at i stedet for en streng var spørringsparameteren en assosiativ matrise som angir post__ikke_i-alternativet.
Nestede Løkker
Nestende løkker betyr at Du kjører en andre sløyfe før du fullfører den første. Dette kan være nyttig å vise en postliste med en snarvei for eksempel.
$my_query = new WP_Query( 'cat=3' );if ( $my_query->have_posts() ) { while ( $my_query->have_posts() ) { $my_query->the_post();the_content();}}wp_reset_postdata();
det er nødvendig å tilbakestille hovedsløyfedataene etter en nestet sløyfe slik at noen globale variabler holder de riktige verdiene igjen.
Kilder
seksjonen om flere løkker er en kombinasjon Av Ryan Boren og Alex Kings diskusjon om Sløyfen på Hackers Mailingliste. Den nestede loops eksempel ble inspirert av en annen diskusjon på mailinglisten og et innlegg Av Nicolas Kuttler.
Ressurser
- WordPress WP_Query Generator
- Komme Inn I Loop – (lysbilder) en introduksjon til hvordan plugins og temaer kan endre Loop
- WordPress Custom Loop
- WordPress WP_Query Loop Generator
Relatert
for å lære Mer Om WordPress-Sløyfen, Og De Ulike Malkodene Som Bare Fungerer Innenfor Sløyfen, Er Det Flere Ressurser:
Mer Om Sløyfen
- Artikkel: Sløyfen I Aksjon
- Artikkel: Malkoder
- Artikkel: Bruke Loop I Malfiler
Artikler
- Artikkel: The Loop-en grunnleggende oversikt over bruken av spørring i WordPress loop.
- Artikkel: Spørringsoversikt – Forklaring på hvordan du bestemmer hvilke spørringer som genererer WordPress.
- Artikkel: Tilpasse Spørringer Via Krok
- Artikkel: Vis Artikler MYSQL-spørring ved hjelp av egendefinert
- Artikkel: Bygg avanserte spørringer på Taksonomier
- Artikkel: Bygg tilpasset spørring ved Hjelp Av Offset og paginering
Kodedokumentasjon
- Klasse: Wp_query – Detaljert Oversikt over klasse WP_Query
- Klasse: WP_Comment_Query – Klasse for kommentar-relaterte spørringer
- Klasse: wp_user_query – Klasse for brukerrelaterte spørringer
- Objekt: $wpdb-Oversikt over bruk av $wpdb objekt
- Funksjon: set_query_var()
- Funksjon: Get_query_var()
- Funksjon: Query_posts () – lag ekstra tilpasset spørring
- Funksjon: Get_post () – ta en id for et element og returnere postene i databasen for den artikkelen
- funksjon: get_posts() – en spesialisert funksjon som returnerer en matrise med elementer
- Funksjon: get_posts() – en spesialisert funksjon som returnerer en matrise med sider
- Funksjon: have_posts() – en betingelse som bestemmer om spørringen returnerte en artikkel
- Funksjon: the_post() – Brukes til å automatisk sette sløyfen etter en spørring
- Funksjon: rewind_posts() – fjerner gjeldende sløyfe
- funksjon: setup_postdata() – angir dataene for Et enkelt spørringsresultat i en sløyfe
- funksjon: Wp_reset_postdata() – Gjenoppretter forrige spørring (vanligvis etter en sløyfe i en annen sløyfe)
- Funksjon: wp_reset_query()
- Funksjon: is_main_query() – Sikrer at spørringen som blir endret er bare hovedspørringen
- Handlingskrok: pre_get_posts – Endre WordPress – spørringer før de utføres
- handlingskrok: the_post – Endre postobjektet etter spørring
- filterkrok: found_posts-endrer verdien av objektet found_posts wp_query