Kan iemand mij uitleggen hoe deze functie werkt? Ik weet wat het doet, maar als ik naar de broncode in de template Twenty_ten kijk, snap ik niet hoe alle loops worden verzameld in één enkele loop.php (ik zag dat bestand ook).

Dus hoe abstract bijvoorbeeld een bepaald algemeen deel van een sjabloon weg en hergebruik het vervolgens in andere sjablonen?

Opmerkingen

Antwoord

Enkele zeer goede inleidende antwoorden hier.

Kortom, get_template_part() staat themaontwikkelaars toe om een volgorde van specificiteit van sjabloonbestanden in te stellen. Zie het op dezelfde manier als specificiteit zoals het van toepassing is op CSS-selectors. Wanneer u iets ontwerpt, wilt u beginnen met het absolute minimum aan specificiteit, zodat het gemakkelijk kan worden overschreven in delen van een ontwerp die individuele aandacht nodig hebben.

Dus bijvoorbeeld , je bent een blog aan het opmaken en je maakt een lus .php bestand dat goed werkt voor het markeren van berichten. Maar u plant vooruit, en u noemt het later in uw sjabloonbestanden met aanvullende contextspecificaties – stel dat u op de indexpagina get_template_part( "loop", "index" ); aanroept, op het enkele sjabloon roept u get_template_part( "loop", "single" );, op archiefpaginas roept u get_template_part( "loop", "archive" ); aan, enzovoort. Dit maakt het heel gemakkelijk wanneer je besluit om de lus op je archiefpaginas anders te markeren dan op de startpagina: maak gewoon een loop-archive.php -sjabloon en “zal worden gebruikt in plaats van de algemene loop.php .

Maar de magie achter get_template_part() zit in de functie locate_template(), die eerst de themamap controleert en vervolgens de bovenliggende map (als een bestaat) voor het bestand met de naam. Dit is erg handig voor de ontwikkeling van plug-ins. In een van mijn plug-ins definieer ik een aangepast berichttype en heb ik een lussjabloonbestand gemaakt voor dat aangepaste berichttype in mijn plug-in-directory. Maar … ik wil om themas die mijn plug-in gebruiken, mijn markeringen te laten overschrijven als ze dat willen. Dit is waar locate_template() echt wonderen doet.

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

zoekt naar elk van de namen in de array $ template_names in de stylesheet-directory en vervolgens in het bestand temp late directory. Het doorgeven van “true” als $ load argument betekent dat het het eerste gevonden bestand vereist , en een lege string zal retourneren als er geen sjabloonbestand is gevonden. Dus ik kan zoiets als dit doen in mijn plug-in:

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

… wat het hopelijk heel gemakkelijk zou moeten maken voor thema-ontwikkelaars om mijn plug-in aan te passen door gewoon een bestand met de naam loop-mycustomposttype.php in hun thema.

Reacties

  • Vervang lokalisatiesjabloon door dit, alstublieft. include(locate_template( 'loop-mycustomposttype.php')) Op deze manier is het mogelijk om variabelen door te geven. Ik ' heb dit hier link gevonden. Het ' is buitengewoon handig!
  • Als je dit doet, zal het ' nodig zijn om dit te veranderen, indien ook. Zoals dit if ( false === include(locate_template( 'loop-mycustomposttype.php')) )
  • Oh, goed punt. Met de formule die ik heb gegeven, is de oproep require of require_once (van locate_template) aanwezig een functie en dus heeft ' geen toegang tot het huidige bereik.

Antwoord

Niet alle loops, de hoofdlus. 😉 Het maakt niet uit of je naar je voorpagina kijkt of een categorie of wie weet wat, je “zult altijd een hoofdlus hebben. De inhoud van die hoofdlus wordt bepaald door de query die ervoor is uitgevoerd. je sjabloon is überhaupt aangeroepen.

Het loop.php-sjabloon loopt alleen over de items in de loop en formatteert ze. Zie de documentatie bij de Codex .

Als je naar Twenty-Ten “s loop.php kijkt, kun je zien dat Twenty-Ten diversifieert vervolgens binnen dat enkele sjabloonbestand.

get_template_part() laadt slechts een sjabloongedeelte en loopt er doorheen. U kunt net zo goed uitpakken delen van je loop.php in aparte bestanden en vervang ze door een get_template_part("loop", "category") enzovoort oproepen.

Of je zou een deelsjabloon kunnen hebben voor elk individueel bericht in de lus en laat je loop.php alleen get_template_part("loop","post"); aanroepen binnen de while... clausule. Allemaal aan jou.

Antwoord

Van de get_template_part codex :

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

vereist PHP () voor het eerste bestand dat bestaat …

Het zal zo effectief werken alsof je een ander php-bestand nodig hebt.

Update : Er is een klein verschil met “vereisen” – Het is verpakt in een functie, dus u moet global als u variabelen van uw sjabloon wilt doorgeven aan uw sjabloongedeelte.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *