Kan någon snälla förklara för mig hur den här funktionen fungerar? Jag vet vad det gör, men när jag tittar på källkoden i mallen tjugo_ten, förstår jag inte hur alla slingor samlas i en enda loop.php (jag såg den filen också).

Så hur kan man till exempel ta bort en viss gemensam del av mallen och sedan återanvända den över andra mallar?

Kommentarer

Svar

Några väldigt bra introduktionssvar här.

I grund och botten tillåter get_template_part() temautvecklare att ställa in en specificitetsordning för mallfiler. Tänk på det på samma sätt specificitet som den gäller för CSS-väljare. När du utformar något vill du börja med ett minimum av specificitet så att det lätt kan åsidosättas i delar av en design som behöver individuell uppmärksamhet.

Så till exempel , du utformar en blogg och skapar en loop .php -fil som fungerar bra för att markera inlägg. Men du planerar framåt och du kallar det i dina mallfiler senare med ytterligare sammanhangsspecifikationer – säg, på indexsidan ringer du get_template_part( "loop", "index" );, på den enskilda mallen ringer du get_template_part( "loop", "single" );, på arkivsidor ringer du get_template_part( "loop", "archive" ); och så vidare. Detta gör det väldigt enkelt på vägen när du bestämmer dig för att markera slingan på dina arkivsidor annorlunda än hemsidan: skapa bara en loop-archive.php -mallen och den kommer att användas snarare än den generiska loop.php .

Men magin bakom get_template_part() finns i funktionen locate_template(), som först kontrollerar temakatalogen och sedan överordnad katalogen (om en finns) för den fil som heter. Detta är mycket användbart för pluginutveckling. I ett av mina plugins definierar jag en anpassad posttyp och skapade en loopmallfil för den anpassade posttypen i min plugin-katalog. Men … Jag vill för att låta teman som använder mitt plugin åsidosätta min markering om de väljer. Det är här locate_template() verkligen gör underverk.

locate_template($template_names, $load = false, $require_once = true ) 

letar efter vart och ett av namnen i arrayen $ template_names i formatmallens katalog, sedan i temp sen katalog. Att skicka ”true” som $ load-argument betyder att det kräver den första filen som hittades och returnerar en tom sträng om ingen mallfil hittades. Så jag kan göra något liknande i mitt plugin:

if ( "" === locate_template( "loop-mycustomposttype.php", true, false ) ) include( "loop-mycustomposttype.php" ); 

… vilket förhoppningsvis skulle göra det väldigt enkelt för temautvecklare att anpassa mitt plugin bara genom att inkludera en fil som heter loop-mycustomposttype.php i deras tema.

Kommentarer

  • Ersätt lokaliseringsmall med detta tack. include(locate_template( 'loop-mycustomposttype.php')) Detta sätt är möjligt att skicka variabler. Jag ' har hittat det här länk . Det ' är extremt användbart!
  • Om du gör det ' kommer det att bli nödvändigt att ändra detta om också. Gilla det här if ( false === include(locate_template( 'loop-mycustomposttype.php')) )
  • Åh, bra punkt. Med den formel jag gav är require eller require_once samtalet (från locate_template) en funktion och så har ' inte tillgång till det aktuella omfånget.

Svar

Inte alla slingor, huvudslingan. 😉 Oavsett om du tittar på din förstasida eller en kategori eller som vet vad, kommer du alltid att ha en huvudslinga. Innehållet i den huvudslingan bestäms av frågan som har körts innan din mall blev kallad alls.

Loop.php-mallen körs bara över objekten i slingan och formaterar dem. Se dokumentationen på Codex .

Om du tittar på Twenty-Tens loop.php kan du se att Twenty-Ten diversifierar sedan inom den enskilda mallfilen.

get_template_part() laddar bara en malldel och går igenom den. Du kan lika gärna extrahera delar av din loop.php i separata filer och ersätt dem med en get_template_part("loop", "category") och så vidare samtal.

Eller så kan du ha en delmall för varje enskilt inlägg i slingan och låt din loop.php bara ringa get_template_part("loop","post"); inom while... -satsen. Allt upp till dig.

Svar

Från get_template_part codex :

<?php get_template_part( "loop", "index" ); ?>

gör ett PHP-krav () för den första filen som finns …

Så effektivt fungerar det som om du skulle behöva en annan php-fil.

Uppdatera : Det är en liten skillnad att ”kräva” – Den är insvept i en funktion så du måste global om du vill överföra variabler från din mall till din malldel.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *