WordPress.org

Sprog: engelsk • Fransk • Italiensk • Loop 日本语 Português do Brasil • Русский • kinesisk(简体) • kinesisk(繁體) • (Tilføj dit sprog)

Løkken er PHP-kode, der bruges af WordPress til at vise poster. Ved hjælp af sløjfen behandler du hvert indlæg, der skal vises på den aktuelle side, og formaterer det efter, hvordan det matcher de angivne kriterier i Loop-tags. Enhver HTML-eller PHP-kode i Løkken behandles på hvert indlæg.

når dokumentationen siger “dette tag skal være inden for sløjfen”, f.eks. For eksempel viser sløjfen følgende oplysninger som standard for hvert indlæg:

  • Titel (the_title ())
  • tid (the_time ())
  • kategorier (The_category ()).

du kan vise andre oplysninger om hvert indlæg ved hjælp af de relevante Skabelonkoder eller (for avancerede brugere) ved at få adgang til $post-variablen, som er indstillet med det aktuelle indlægs oplysninger, mens sløjfen kører.

for en Begynders kig på løkken, se løkken i aktion.

brug af sløjfen

sløjfen skal placeres i temaets indeks.php og i andre skabeloner, der bruges til at vise indlæg oplysninger.

sørg for at medtage opkaldet til overskriftskabelonen øverst i dit temas skabeloner. Hvis du bruger sløjfen inde i dit eget design (og dit eget design ikke er en skabelon), skal du indstille VP_USE_THEMES til false:

<?php define( 'WP_USE_THEMES', false ); get_header(); ?>

løkken 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 bruger PHP ‘ s alternative syntaks til kontrolstrukturer og kan også udtrykkes som:

<?php if ( have_posts() ) {while ( have_posts() ) {the_post(); //// Post Content here//} // end while} // end if?>

Loop eksempler

stil indlæg fra en kategori forskelligt

dette eksempel viser hvert indlæg med sin titel (som bruges som et link til postens Permalink), kategorier og indhold. Det tillader også indlæg i en kategori med Kategori ID ‘3’ at blive stylet forskelligt. For at opnå dette, In_category() skabelon Tag bruges. Læs kommentarerne omhyggeligt for at se, hvad hver del af koden gør.

Bemærk: Alle HTML-kode skal være uden for <?php ?> mærker. Og PHP-kode (selv ting så enkle som krøllede seler: } ) skal være inde i <?php ?> mærker. Du kan starte og stoppe blokke af PHP-kode for at intersperse HTML-kode inden for if and else-udsagn, som vist i ovenstående eksempel.

Ekskluder indlæg fra en kategori

dette eksempel viser, hvordan du skjuler en bestemt kategori eller kategorier fra at blive vist. I dette tilfælde er stillinger fra kategori 3 og 8 udelukket. Eksemplet er anderledes end eksemplet ovenfor, idet det ændrer selve forespørgslen.

Bemærk: Hvis du bruger dette eksempel til din hovedside, skal du bruge en anden skabelon til dine Kategoriarkiver; ellers vil ekskludere alle indlæg i kategori 3 og kategori 8, selv når du ser det Kategoriarkiv! Men hvis du vil bruge den samme skabelonfil, kan du undgå dette ved at bruge is_home () – tagget for at sikre, at indlæg fra kategori 3 og kategori 8 kun udelukkes 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 {...?>...

der er andre betingede Tags, der kan bruges til at styre output afhængigt af, om en bestemt betingelse er sand med hensyn til den ønskede side.

objektorientering

sløjfer er en kombination af objektorienteret og global adfærd. Dette er forvirrende i starten.

de to vigtige globale variabler for sløjfer er:

  • $dette er en af de mest populære og mest populære måder at gøre dette på.
  • $post, som er det aktuelle objekt for klasse Vp_post

Husk: alle skabelontags er afhængige af $post global-variablen som standard, og $post global-variablen indstilles/ændres af the_post (), som får sine data fra den globale variabel vp_post. $post er også indstillet / ændret af:: the_post() som brugt i sekundære sløjfer.

flere sløjfer

dette afsnit omhandler avanceret brug af sløjfen. Det er lidt teknisk, men lad det ikke skræmme dig. Vi starter med et let eksempel og arbejder derfra. Med lidt sund fornuft, tålmodighed og entusiasme kan du også gøre flere sløjfer.

først ud, hvorfor skulle man ønsker at bruge flere loops? Generelt er svaret, at du måske vil gøre noget med en gruppe indlæg og gøre noget andet end en anden gruppe indlæg, men vise begge grupper på samme side. “Noget” kan betyde næsten alt; du er kun begrænset af din PHP dygtighed og din fantasi.

vi kommer ind på eksempler nedenfor, men først skal du læse om det grundlæggende. Se på den grundlæggende løkke. Den består af:

<?php if ( have_posts() ) : ?><?php while ( have_posts() ) : the_post(); ?> <!-- do stuff ... --><?php endwhile; ?><?php endif; ?>

lidt til side på Do stuff: i dette eksempel er det simpelthen en pladsholder for en flok kode, der bestemmer, hvordan man formaterer og viser hvert indlæg på en side. Denne kode kan ændres afhængigt af, hvordan du vil have dit ordtryk til at se ud. Hvis du ser på Kubrick-temaets indeks.php afsnittet gør ting ville være alt nedenfor:

<?php while ( have_posts() ) : the_post(); ?>

til ovenfor:

<?php comments_popup_link( 'No Comments "', '1 Comment "', '% Comments "' ); ?>

en forklaring på koderne derude:have_posts() og the_post() er bekvemmelighedsindpakninger omkring det globale $ – objekt, hvilket er hvor hele handlingen er. $- Forespørgslen kaldes i blogoverskriften og fed-forespørgselsargumenter, der kommer ind gennem GET og PATH_INFO. $- Forespørgslen tager argumenterne og bygger og udfører en DB-forespørgsel, der resulterer i en række indlæg. Dette array er gemt i objektet og returneres også tilbage til bloghovedet, hvor det er fyldt ind i global $posts array (for bagudkompatibilitet med gamle post loops).

når du er færdig med at indlæse blogoverskriften og falder ned i skabelonen, ankommer vi til vores post Loop. Have_posts () kalder simpelthen til $ 6062 > have_posts (), som kontrollerer en loop-tæller for at se, om der er nogen indlæg tilbage i post-arrayet. 6062 > the_post (), som fremmer loop-tælleren og opretter den globale $post-variabel samt alle de globale postdata. Når vi har opbrugt løkken, have_posts () vil vende tilbage falsk, og vi er færdige.

Loop eksempler

nedenfor er tre eksempler på brug af flere sløjfer. Nøglen til at bruge flere sløjfer er, at $vp_forespørgsel kun kan kaldes en gang. For at omgå dette er det muligt at genbruge forespørgslen ved at kalde spol_posts() eller ved at oprette et nyt forespørgselsobjekt. Dette er dækket af Eksempel 1. I eksempel 2 dækkes brugen af en variabel til at gemme resultaterne af en forespørgsel. Endelig bringer ‘multiple loops in action’ en masse ideer sammen for at dokumentere en måde at bruge flere loops til at promovere indlæg i en bestemt kategori på din blogs hjemmeside.

Multiple Loops eksempel 1

for at løbe gennem den samme forespørgsel en anden gang, Ring Spol tilbage(). Dette nulstiller looptælleren og giver dig mulighed for at lave en anden løkke.

<?php rewind_posts(); ?> <?php while ( have_posts() ) : the_post(); ?><!-- Do stuff... --><?php endwhile; ?>

hvis du er færdig med indlæggene i den oprindelige forespørgsel, og du vil bruge en anden forespørgsel, kan du genbruge objektet $posts ved at ringe til posts() og derefter løbe tilbage igennem. Forespørgselsposterne() vil udføre en ny forespørgsel, opbygge et nyt indlæg array og nulstille loop tælleren.

hvis du har brug for at holde den oprindelige forespørgsel rundt, kan du oprette et nyt forespørgselsobjekt.

Multiple Loops eksempel 2

en anden version af at bruge flere Loops tager en anden tack for at komme rundt manglende evne til at bruge have_post() og the_post(). For at løse dette skal du gemme den originale forespørgsel i en variabel og derefter tildele den igen med den anden sløjfe. På denne måde kan du bruge alle de standardfunktioner, der er afhængige af alle globals.

for eksempel:

Bemærk: i PHP 5 henvises der til objekter med operatøren “= clone” i stedet for “=” som i PHP 4. For at gøre eksempel 2 arbejde i PHP 5 skal du bruge følgende kode:

dette andet eksempel virker dog ikke i 2.1.

flere sløjfer i aktion

den bedste måde at forstå, hvordan man bruger flere sløjfer, er faktisk at vise et eksempel på dets anvendelse. Måske er den mest almindelige brug af flere sløjfer at vise to (eller flere) lister over indlæg på en side. Dette gøres ofte, når en internetmaster ikke kun vil have det nyeste indlæg skrevet, men også indlæg fra en bestemt kategori.

lad os antage, at vi vil have to lister over indlæg, hvis vi lader alle formaterings-og CSS-problemer være til side. En, der viser de seneste indlæg (standard 10 indlæg senest tilføjet), og en anden, der kun indeholder et indlæg fra kategorien ‘featured’. Indlæg i kategorien’ featured ‘ skal vises først efterfulgt af den anden liste over indlæg (standarden). Fangsten er, at der ikke skal vises noget indlæg i begge kategorier.

Trin 1. Få kun et indlæg fra kategorien’ featured’.

på engelsk ville ovenstående kode læse:

sæt $my_forespørgsel svarende til resultatet af forespørgsel på alle indlæg, hvor Kategorien er navngivet, og forresten, få mig kun et indlæg. Indstil også variablen $do_not_duplicate svarende til ID-nummeret på det enkelte indlæg, der returneres. Husk, at linjen gør ting repræsenterer alle de formateringsindstillinger, der er knyttet til det hentede indlæg.

Bemærk, at vi har brug for værdien af $do_not_duplicate i det næste trin for at sikre, at det samme indlæg ikke vises på begge lister.

Trin 2. Den anden sløjfe, få de seneste indlæg (undtagen en).

følgende kode får seneste indlæg (som defineret i indstillinger) gem den, der allerede vises fra den første sløjfe, og viser dem i henhold til Do stuff.

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue;?><!-- Do stuff... --><?php endwhile; endif; ?>

på engelsk ville ovenstående kode læse:

få alle indlæg, hvor et indlæg er lig med $do_not_duplicate, så gør bare ingenting (fortsæt), ellers Vis alle de andre indlæg i henhold til Do stuff. Opdater også cachen, så tagging og nøgleord plugins spiller godt. Husk, $ do_not_duplicate variabel indeholder ID ‘ et for det indlæg, der allerede er vist.

slutresultatet

Sådan ser det sidste stykke kode ud uden nogen formatering:

slutresultatet ville være en side med to lister. Den første liste indeholder kun et indlæg-det seneste indlæg fra kategorien ‘funktion’. Den anden liste vil indeholde seneste indlæg (som defineret i indstillinger) undtagen det indlæg, der allerede vises på den første liste. Så når funktionsposten er erstattet med en ny, vises den forrige funktion i afsnittet standard postliste nedenfor (afhængigt af hvor mange indlæg du vælger at vise og på postfrekvensen). Denne teknik (eller lignende) er blevet brugt af mange i forbindelse med viden om Skabelonhierarkiet for at skabe et andet look til hjemmet.php og indeks.php. Se tilknyttede ressourcer nederst på denne side.

Bemærk For flere indlæg i den første kategori

hvis posts_per_page=2 eller mere, skal du ændre koden lidt. Variablen $do_not_duplicate skal ændres til et array i modsætning til en enkelt værdi. Ellers afsluttes den første sløjfe, og variablen $do_not_duplicate svarer kun til id ‘ et for det seneste indlæg. Dette vil resultere i duplikerede indlæg i anden sløjfe. For at løse problemet skal du erstatte

med

Bemærk, at “posts_per_page” kan være et hvilket som helst nummer.Dette ændrer $do_not_duplicate til et array. Udskift derefter

<?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; ?>

hvor du fortsætter mønsteret for uanset posts_per_page er sat lig med (2 i dette tilfælde).

Alternativt kan du overføre hele $ do_not_duplicate array til $, og kun poster, der matcher dine kriterier, returneres:

<?php query_posts( array( 'post__not_in' => $do_not_duplicate ) );if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 

Bemærk, at i stedet for en streng var forespørgselsparameteren et associativt array, der indstillede indstillingen post__not_in.

indlejrede sløjfer

Nesting loops betyder, at du kører en anden sløjfe, før du afslutter den første. Dette kan være nyttigt at vise en postliste med en kortkode 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ødvendigt at nulstille hovedsløjfedataene efter en indlejret sløjfe, så nogle globale variabler holder de korrekte værdier igen.

kilder

afsnittet om flere sløjfer er en kombination af Ryan Boren og Kings diskussion om sløjfen på Hackers mailingliste. Det indlejrede loops-eksempel blev inspireret af en anden diskussion på mailinglisten og et indlæg af Nicolas Kuttler.

Resources

  • Ordtryksgenerator
  • Introduktion til, hvordan plugins og temaer kan ændre sløjfen
  • ordtryk tilpasset Loop
  • Ordtryksgenerator

relateret

for at lære mere om sløjfen og de forskellige Skabelonmærker, der kun fungerer inden for sløjfen, er her flere ressourcer:

mere om sløjfen

  • artikel: sløjfen i aktion
  • artikel: Skabelonmærker
  • artikel: Brug af Loop i skabelonfiler

artikler

  • artikel: Loop – en grundlæggende oversigt over dens brug af forespørgsel inden for Ordtryksløjfen.
  • artikel: Forespørgselsoversigt – forklaring på, hvordan man bestemmer, hvilke forespørgsler der genererer ordtryk.
  • artikel: tilpasning af forespørgsler via krog
  • artikel: Vis artikler forespørgsel ved hjælp af brugerdefineret
  • artikel: Byg avancerede forespørgsler på taksonomier
  • artikel: Byg brugerdefineret forespørgsel ved hjælp af forskydning og paginering

Kodedokumentation

  • klasse:
  • klasse:
  • klasse: klasse for kommentarrelaterede forespørgsler
  • Klasse: Klasse: Klasse for brugerrelaterede forespørgsler
  • objekt: $objekt for brug af objektet
  • funktion: ()
  • funktion: Get_cery_var ()
  • funktion: forespørgselsindlæg () – Opret yderligere brugerdefineret forespørgsel
  • funktion: get_post () – tag et id for et element og returner posterne i databasen for den pågældende artikel
  • funktion: get_posts() – en specialiseret funktion, der returnerer en række elementer
  • funktion: get_pages() – en specialiseret funktion, der returnerer en række sider
  • funktion: have_posts() – en betingelse, der bestemmer, om forespørgslen returnerede en artikel
  • funktion: the_post() – bruges til automatisk at indstille sløjfen efter en forespørgsel
  • funktion: Spol tilbage() – rydder den aktuelle loop
  • funktion: setup_postdata() – indstiller dataene for et enkelt forespørgselsresultat inden for en loop
  • funktion: () – gendanner den forrige forespørgsel (normalt efter en løkke inden for en anden løkke)
  • funktion: vi_reset_forespørgsel()
  • funktion: vi_main_forespørgsel() – sikrer, at forespørgslen, der ændres, kun er hovedforespørgslen
  • Action Hook: pre_get_posts – Skift Ordtryksforespørgsler, før de udføres
  • action Hook: the_post – Rediger postobjektet efter forespørgsel
  • filter hook: found_posts – ændrer værdien af objektet found_posts
denne artikel er markeret som behov for redigering. Du kan hjælpe kodeksen ved at redigere den.

You might also like

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.