Kan noen forklare meg hvordan denne funksjonen fungerer? Jeg vet hva det gjør, men når jeg ser på kildekoden i malen tjue_ten, får jeg ikke ut hvordan alle sløyfer blir samlet i en enkelt loop.php (jeg så den filen også).
Så hvordan kan vi for eksempel trekke bort en bestemt felles del av malen og deretter bruke den på tvers av andre maler?
Kommentarer
- Prøv å se på codex.wordpress.org/Function_Reference/get_template_part
Svar
Noen veldig gode innledende svar her.
I utgangspunktet lar get_template_part()
temautviklere sette opp en spesifikke rekkefølge på malfiler. Tenk på det på samme måte som spesifisitet slik det gjelder CSS-velgerne. Når du designer noe, vil du starte med et minimum av spesifisitet, slik at det enkelt kan overstyres i deler av et design som trenger individuell oppmerksomhet.
Så for eksempel , du styler en blogg og oppretter en loop .php -fil som fungerer bra for å markere innlegg. Men du planlegger fremover, og du kaller det i malfilene dine senere med ytterligere kontekstspesifikatorer – si, på indeksiden ringer du get_template_part( "loop", "index" );
, på den enkle malen, du ringer til get_template_part( "loop", "single" );
, på arkivsider, ringer du til get_template_part( "loop", "archive" );
, og så videre. Dette gjør det veldig enkelt på veien når du bestemmer deg for å markere sløyfen på arkivsidene dine annerledes enn hjemmesiden: bare lag et loop-archive.php mal, og den vil brukes i stedet for den generiske loop.php .
Men magien bak get_template_part()
er i funksjonen locate_template()
, som først sjekker temakatalogen, deretter foreldrekatalogen (hvis en eksisterer) for filen som heter. Dette er veldig nyttig for utvikling av plugin. I et av pluginene mine definerer jeg en egendefinert innleggstype og opprettet en loopmalfil for den egendefinerte innleggstypen i plugin-katalogen. Men … jeg vil for å la temaer som bruker pluginet mitt overstyre markeringen min hvis de velger. Det er her locate_template()
virkelig gjør underverker.
locate_template($template_names, $load = false, $require_once = true )
vil se etter hvert av navnene i $ template_names-arrayet i stilarkatalogen, deretter i temp sen katalog. Å sende «true» som $ load-argument betyr at det krever den første filen som er funnet, og vil returnere en tom streng hvis ingen malfil ble funnet. Så jeg kan gjøre noe slikt i pluginet mitt:
if ( "" === locate_template( "loop-mycustomposttype.php", true, false ) ) include( "loop-mycustomposttype.php" );
… som forhåpentligvis skal gjøre det veldig enkelt for temautviklere å tilpasse pluginet mitt bare ved å inkludere en fil som heter loop-mycustomposttype.php i deres tema.
Kommentarer
- Erstatt lokaliser_template med dette, takk.
include(locate_template( 'loop-mycustomposttype.php'))
Denne måten er mulig å overføre variabler. Jeg ' har funnet dette her lenke . Det ' er ekstremt nyttig! - Gjør du det ' vil være nødvendig å endre dette hvis også. Som dette
if ( false === include(locate_template( 'loop-mycustomposttype.php')) )
- Å, bra poeng. Med formelen jeg ga er
require
ellerrequire_once
samtalen (fralocate_template
) en funksjon og har ikke ' t tilgang til gjeldende omfang.
Svar
Ikke alle sløyfer, hovedsløyfen. 😉 Uansett om du ser på forsiden eller en kategori eller som vet hva, vil du alltid ha en hovedsløyfe. Innholdet i hovedsløyfen bestemmes av spørringen som er kjørt før malen din ble ringt i det hele tatt.
Malen loop.php kjører bare over elementene i sløyfen og formaterer dem. Se dokumentasjonen på Codex .
Hvis du ser på Twenty-Ten «s loop.php, kan du se at Twenty-Ten diversifiserer deretter innenfor den ene malfilen.
get_template_part()
bare laster inn en maldel og går gjennom den. Du kan like godt trekke ut deler av loop.php i separate filer og erstatt dem med en get_template_part("loop", "category")
og så videre samtaler.
Eller du kan ha en delmal for hvert enkelt innlegg i løkken og ha loop.php bare ring get_template_part("loop","post");
i while...
klausulen. Alt opp til deg.
Svar
Fra get_template_part codex :
<?php get_template_part( "loop", "index" ); ?>
vil kreve et PHP-krav () for den første filen som eksisterer …
Så effektivt vil det fungere som om du trenger en annen php-fil.
Oppdater : Det er en liten forskjell å «kreve» – Den er pakket inn i en funksjon så du må global
hvis du vil overføre variabler fra malen din til maldelen.