Maak WordPress theming makkelijker met get_template_part

Geplaatst op: 2 juni 2014 | Auteur: Niels Pilon | Categorie: WordPress

Een van de eerste fouten die je als startende WordPress themer maakt is het dupliceren van je code. Het lijkt in eerste instantie heel verleidelijk om code te knippen en te plakken in al je template files om deze snel te hergebruiken. Denk bijvoorbeeld aan de opmaak van een bericht in je index.php, single.php en category.php bestanden. Wat in het begin een snelle oplossing lijkt kan achteraf wel eens vervelender uitpakken.

Don’t repeat yourself

Goede software en ook WordPress themes bestaan uit zo min mogelijk herhaalde code. Dit wordt ook wel het schrijven van code volgens de DRY (Don’t Repeat Yourself) methode genoemd. Door te werken met deze methode maak je het jezelf veel makkelijker om je code later aan te passen.

Want is het niet veel efficiënter als je de eerder geknipte en geplakte code op één plek kan aanpassen in plaats van alle losse template files? Dat scheelt je een hoop zoekwerk en de mogelijkheid dat er inconsistente code en/of opmaak gebruikt gaat worden als je ergens iets vergeten bent aan te passen.

Get_template_part functie

In WordPress kan je dit gelukkig oplossen met de get_template_part functionaliteit. Dit zorgt ervoor dat een bepaald deel van je template in een apart php-bestand zet. Dit bestand roep je, wanneer dat nodig mocht zijn, op met de get_template_part functie. In feite knip je dus je theme op in allerlei losse onderdelen.

Hoe werkt de get_template_part functie

De basis van de get_template functie bestaat uit de volgende code:

<?php get_template_part( $slug, $name ); ?>

De $slug is een verplichte parameter en bevat de naam van de slug voor het templatebestand wat je gaat aanroepen.. De $name is geen verplichte parameter maar kan gebruikt worden om een specifieker bestand aan te roepen bijvoorbeeld meta-single.php of meta-category.php.

Als je het template bestand in een aparte map plaatst dan zit je de link naar het bestand in het $slug gedeelte. Stel ik heb het meta-single.php bestand in de ‘partials’ map geplaatst dan moet ik de volgende code gebruiken:

<?php get_template_part( ‘partials\meta’, ‘single’  ); ?>

Bovenstaande code doet het volgende:

  • Het doorzoekt je theme naar een meta-single.php bestand in de partials map
  • Wordt het bestand niet gevonden dan wordt een geen fout gegeneerd
  • Er zal wel verder gezocht worden naar andere geschikte bestanden als deze voorradig zijn
  • Het doorzoekt zowel je child theme (indien aanwezig) als het hoofd theme

Child themes en get_template_part

Het mooie aan de get_template_part functie is dat de functie altijd eerst kijkt in de child theme map om te kijken of daar het template bestand is. Pas daarna wordt er gekeken in de hoofd theme map. Stel ik gebruik een child theme en het template bestand heb ik gespecificeerd naar meta-category.php

In dat geval kan ik de volgende functie gebruiken om het loop-index.php bestand op te roepen:

<?php get_template_part( ‘partial\meta’, ‘category’ ); ?>

Nadat je deze code hebt geplaatst doet WordPress het volgende

  • Het doorzoekt je child theme naar het meta.category.php bestand
  • Het doorzoekt je hoofd theme naar het meta-category.php bestand
  • Het doorzoek je child theme naar het meta.php bestand
  • Het doorzoekt je hoofd theme naar het meta.php bestand

Een voorbeeld

Stel je hebt de volgende eenvoudige code om berichten te laten zien op je blog:

<?php if ( have_posts() ): ?>

<?php while ( have_posts() ) : the_post(); ?>
		
<article>
  <header class=”meta”>
    <h2><a href="<?php the_permalink() ); ?>" title="Permalink naar <?php the_title(); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
    <php the_date(); ?> |  <?php the_author(); ?>
  </header>

<?php the_content(); ?>

</article>

<?php endwhile; ?>

<?php else: ?>
  <h2><Er zijn geen berichten gevonden></h2>
<?php endif; ?>

De code in de header kan je in veel gevallen prima opnieuw gebruiken voor je index, single post en categorieën/archief template. In plaats van de code steeds te herbruiken kan je deze ook in een apart bestand zetten en deze met de get_template_part functie oproepen. Dit bestand plaats je in je template map of in een submap van je template, net wat je zelf het prettigst vind werken. Zelf plaats ik ze altijd in een submap of zelfs nog dieper weg.

Om het eenvoudig te houden plaats ik de volgende code in een meta.php bestand. Dit bestand plaats in de hoofdmap (root) van het theme.

<header class=”meta”>
  <h2><a href="<?php the_permalink() ); ?>" title="Permalink naar <?php the_title(); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
  <php the_date(); ?> |  <?php the_author(); ?>
</header>

De template file, bijvoorbeeld single.php waarin de loop zich bevindt komt er met behulp van de get_template_part functie als volgt uit te zien.

<?php if ( have_posts() ): ?>

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

  <?php get_template_part ( ‘meta’ ); ?>

<?php the_content(); ?>

</article>

<?php endwhile; ?>

<?php else: ?>
  <h2><Er zijn geen berichten gevonden></h2>
<?php endif; ?>

Zoals je misschien al hebt begrepen is de get_template_part functie bijzonder handig voor stukken code die je op meerdere plaatsen laat terugkomen in je WordPress theme. Door deze functie te gebruiken maak je het jezelf zo eenvoudig mogelijk om wijzigingen in je template aan te brengen en weet je zeker dat je deze overal op dezelfde manier getoond wordt. En ja, wie wil er nou niet zo efficiënt mogelijk werken?

Over Niels Pilon

Waanzinnige WordPress websites ontwikkelen. Dat doet Niels het liefst de hele dag. Jarenlange ervaring, een uitmuntend gevoel voor design en een enorme interesse in typografie zorgen voor een prachtig eindresultaat. Op het gebied van webdesign wordt hij graag uitgedaagd om verwachtingen te overtreffen.

Niels Pilon

Reageer

Geef een reactie

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