Kan nogen forklare mig, hvordan denne funktion fungerer? Jeg ved, hvad det gør, men når jeg ser på kildekoden i skabelonen tyve_ten, kan jeg ikke forstå, hvordan alle sløjfer samles i en enkelt loop.php (jeg så den fil også).
Så hvordan kan man f.eks. Fjerne en bestemt fælles del af skabelonen og derefter genbruge den på tværs af andre skabeloner?
Kommentarer
- Prøv at se på codex.wordpress.org/Function_Reference/get_template_part
Svar
Nogle meget gode indledende svar her.
Dybest set giver get_template_part()
temaudviklere mulighed for at oprette en rækkefølge for skabelonfiler. Tænk på det på samme måde som specificitet, som den gælder for CSS-vælgere. Når du designer noget, vil du starte med det absolutte minimum af specificitet, så det let kan tilsidesættes i dele af et design, der har brug for individuel opmærksomhed.
Så for eksempel , du styler en blog, og du opretter en loop .php -fil, der fungerer godt til markering af indlæg. Men du planlægger fremad, og du kalder det i dine skabelonfiler senere med yderligere kontekstspecifikatorer – sig, på indeksiden kalder du get_template_part( "loop", "index" );
, på den enkelte skabelon kalder du get_template_part( "loop", "single" );
, på arkivsider ringer du til get_template_part( "loop", "archive" );
osv. Dette gør det meget let ned ad vejen, når du beslutter at markere sløjfen på dine arkivsider forskelligt fra hjemmesiden: Opret bare en loop-archive.php skabelon, og den “bruges snarere end den generiske loop.php .
Men magien bag get_template_part()
er i funktionen locate_template()
, som først kontrollerer temabiblioteket og derefter overordnet bibliotek (hvis en findes) for den fil, der hedder. Dette er meget nyttigt til udvikling af plugin. I et af mine plugins definerer jeg en brugerdefineret posttype og oprettede en loop-skabelonfil til den brugerdefinerede posttype i min plugin-mappe. Men … jeg vil for at tillade temaer, der bruger mit plugin, at tilsidesætte min markering, hvis de vælger. Det er her locate_template()
virkelig gør vidundere.
locate_template($template_names, $load = false, $require_once = true )
ser efter hvert af navnene i $ template_names-arrayet i typografiarkataloget og derefter i temp sent bibliotek. At sende “true” som $ load-argumentet betyder, at det kræver den første fil, der er fundet, og returnerer en tom streng, hvis der ikke blev fundet nogen skabelonfil. Så jeg kan gøre noget som dette i mit plugin:
if ( "" === locate_template( "loop-mycustomposttype.php", true, false ) ) include( "loop-mycustomposttype.php" );
… hvilket forhåbentlig skulle gøre det meget let for temaudviklere at tilpasse mit plugin bare ved at inkludere en fil med navnet loop-mycustomposttype.php i deres tema.
Kommentarer
- Udskift lokaliseringsskabelon med dette, tak.
include(locate_template( 'loop-mycustomposttype.php'))
Denne måde er mulig at overføre variabler. Jeg ' har fundet dette her link . Det ' er yderst nyttigt! - Gør det ' det bliver nødvendigt at ændre dette, hvis også. Ligesom dette
if ( false === include(locate_template( 'loop-mycustomposttype.php')) )
- Åh, godt punkt. Med den formel, jeg gav, er
require
ellerrequire_once
opkaldet (fralocate_template
) inde en funktion, og ' har heller ikke adgang til det aktuelle omfang.
Svar
Ikke alle sløjfer, hovedsløjfen. 😉 Uanset om du ser på din forside eller en kategori eller whoknowswhat, har du altid en hovedsløjfe. Indholdet af den vigtigste sløjfe bestemmes af forespørgslen, der er kørt før din skabelon blev overhovedet kaldt.
loop.php-skabelonen kører blot over elementerne i sløjfen og formaterer dem. Se dokumentationen på Codex .
Hvis du ser på Twenty-Ten “s loop.php, kan du se, at Twenty-Ten diversificerer derefter inden for den enkelte skabelonfil.
get_template_part()
bare indlæser en skabelondel og løber igennem den. Du kan lige så godt udtrække dele af din loop.php i separate filer og erstat dem med en get_template_part("loop", "category")
og så videre opkald.
Eller du kan have en delskabelon til hvert enkelt indlæg i loop og få din loop.php kun til at ringe til get_template_part("loop","post");
inden for while...
-klausulen. Alt op til dig.
Svar
Fra get_template_part codex :
<?php get_template_part( "loop", "index" ); ?>
kræver et PHP-krav () for den første fil, der findes …
Så effektivt fungerer det, som om du havde brug for en anden php-fil.
Opdater : Der er en lille forskel at “kræve” – Den er pakket ind i en funktion, så du skal global
, hvis du vil overføre variabler fra din skabelon til din skabelondel.