Le contexte
WordPress, comme tous les outils open-source dont l’évolution est due en grande partie à une communauté de développeurs, change à la fois par à-coup et progressivement. Les versions récentes nous offrent des fonctions qui permettent une grosse mutualisation du code que nous réutilisons régulièrement dans la création de nos thèmes. Voici un petit tour d’horizon de ce que nous utilisons à l’agence.
get_template_part()
C’est la plus récente des fonctions autour de la réutilisation des templates : introduite avec la version 3.0 du core, elle offre la possibilité d’inclure simplement une section de code du thème quand on le souhaite. Il y a 2 utilisations principales que nous décrivons ci-dessous.
La section de code auto-porteuse et réutilisée (dans le thème)
Nous parlons ici d’un bout de code html ou php auto-porteur : par exemple une barre de liens images en HTML affichée à plusieurs endroits du thème. Le code suivant fonctionnera :
Dans le fichier appelant :
get_template_part('imagesbar');
Dans le fichier appelé, nommé imagesbar.php :
Le code du fichier appelé sera ainsi ajouté à chaque endroit ou la fonction get_template_part() sera appelée. Un précision importante : la fonction prend 2 paramètres, un nom de fichier principal et un nom de fichier spécifique. Cela vous permet de faire des combinaisons de nommage : get_template_part(‘imagesbar’,'left’) cherchera le fichier imagesbar-left.php.
L’utilisation d’un bout de code à l’intérieur de la boucle (dans le thème)
Il est tout à fait possible de mutualiser du code à l’intérieur de la boucle : le bloc de navigation, les header ou footer d’articles… Et même les variables globales. Tout un monde de code mutualisé, maintenable et clair s’offre à vous. Dans cas, pas de changement dans l’utilisation :
Dans le fichier appelant :
get_template_part('loop');
Dans le fichier appelé, nommé loop.php :
while ( have_posts() ) : the_post(); // your post loop endwhile;
Un dernier cas se pose avant de passer à la suite : la réutilisation de code à destination de l’admin, ou tout simplement non utilisé dans le thème.
La réutilisation générique d’un bout de code
Pour ce faire, c’est la fonction générique locate_template() qu’il faut utiliser. Je vous renvoie au codex pour son utilisation (simple).
Mais comment inclure un contexte déjà existant?
Se pose un souci dans les cas plus complexes : si avant d’entrer dans la boucle WordPress (ou tout autre boucle), vous avez défini des variables non globales que vous souhaitez réutiliser dans la section de code que vous voulez mutualiser…? Les solutions ci-dessus ne fonctionneront pas. Pourquoi? C’est une histoire de scope… get_template_part() est inclus dans le fichier core general-template.php et fait donc appel dans ce scope-là au fichier que vous lui aurez passé en paramètre. Le fichier sera donc inclus avec une instruction require dans le cas de get_template_part() (ou require_once en fonction du 3ème paramètre que vous aurez passé si vous avez utilisé directement locate_template()), mais tout le contexte du fichier appelant ne sera pas inclus :
Dans le fichier appelant :
$var_test = 34;
get_template_part('loop')
Dans le fichier appelé, nommé loop.php :
$var_test += 2; // $var_test will contain just '2' because it has no idea of the previous initialisation while ( have_posts() ) : the_post(); // your post loop endwhile;
La solution est simple : ramener le chargement du fichier mutualisé dans le scope de notre fichier appelant. Pour cela, on fait :
$var_test = 34;
include(locate_template('loop', true, true));
Dans le fichier appelé, nommé loop.php :
$var_test += 2; // $var_test will contain 34 because loop.php has been loaded in calling file scope while ( have_posts() ) : the_post(); // your post loop endwhile;
Et voilà ! J’espère que ces astuces vous permettront d’utiliser pleinement les fonctionnalités de mutualisation qu’offrent dorénavant WordPress…
Et vous? Comment vous faisiez avant? Utilisez-vous ces nouvelles fonctions depuis qu’elles sont apparues?









Bonjour Nicolas,
Je suis débutante et j’essai d’utiliser wordpress et le thème minimatica pour me créer mon portfolio, mais j’ai un petit problème : je voudrais enlever les « posted by… on… filed under… » qu’on trouve en bas de chaque articles, mais je ne parviens pas à trouver la fonctions à supprimer dans les fichiers wordpress ! Peux-tu m’aider s’il te plaît ?! cela fait des heures et des heures que je cherche !! merci beaucoup !
Justine
Bonjour Justine,
Dans ton cas, il ne va pas s’agir d’une fonction, mais de plusieurs lignes.
Dans ton cas, voici ce qu’il faut faire :
Bonjour,
Merci pour vos explications sur cette fonction wp.
Perso, je l’utilise également dans ce contexte :
Je travaille les thèmes avec le principe parent/enfant pour pouvoir mettre à jour le parent (« twentyten par exemple).
Préférant centraliser le code sur index.php et sur loop.php grâce à quelques conditions genre if is_single(), etc. : je supprimais certaines pages (archive.php, category.php, single.php, etc…)
Problème : lors de la mise à jour du thème parent les pages supprimées reviennent !
La solution que j’ai trouvé est de mettre dans le thème enfant toutes ces pages (single.php, etc.) vides avec seulement ce bout de code php :
get_template_part( ‘index’);
Si vous avez une meilleure solution… n’hésitez pas.
Merci
Bonjour JM,
Tout d’abord désolé du retard de ma réponse… Concernant votre question, cela me semble un contournement honnête : compte-tenu que vous modifiez la manière dont sont construites les pages dans votre thème enfant, il est normal que vous n’ayez pas une compatibilité lors des mises à jour, puisque le système thème parent/enfant est prévu pour faciliter une surcharge de l’existant, mais pas une réécriture (sauf dans le cas de certains fichiers).
Après, je pense que la question se situe plus au niveau des bonnes pratiques de construction de pages : faut-il privilégier comme vous le faites une centralisation sur index.php et loop.php? Ou faut-il externaliser dans divers fichiers spécialisés?
Je n’ai pas encore la réponse mais vous promets un article sur le sujet…
.
En attendant, si vous ne l’avez pas déjà vu, je vous conseille un autre article sur le templating.