Depuis la sortie de WordPress 5.5 le mois dernier, une fonction qu’on utilise depuis des années dans presque tous les thèmes classiques a discrètement gagné un troisième paramètre : get_template_part() accepte désormais un tableau d’arguments transmis directement au fichier inclus. Avant cette version, transmettre une donnée à un template part obligeait à passer par une variable globale bricolée ou par set_query_var(), deux solutions qui fonctionnaient mais compliquaient la lecture du code.
Cette recette montre comment remplacer ces anciens détours par la nouvelle syntaxe, avec un exemple concret : une carte d’article réutilisée à plusieurs endroits du thème, mais avec un style légèrement différent selon le contexte d’appel.
La méthode d’avant, et pourquoi elle posait problème
Avant WordPress 5.5, pour afficher une carte d’article avec une variante « compacte » sur la page d’accueil et une variante normale ailleurs, il fallait généralement écrire quelque chose comme ceci :
set_query_var( 'card_style', 'compact' );
get_template_part( 'template-parts/content', 'card' );
Puis, dans content-card.php, récupérer la valeur avec get_query_var( 'card_style', 'normal' ). Cela fonctionnait, mais détournait une fonction pensée à l’origine pour les variables de la boucle principale (WP_Query), pas pour transmettre des paramètres arbitraires entre fichiers. Le code devenait difficile à suivre pour quiconque n’avait pas déjà rencontré cette astuce.
La nouvelle syntaxe avec le paramètre $args

Depuis WordPress 5.5, get_template_part() accepte un troisième argument, un tableau associatif, rendu disponible dans le fichier inclus sous la forme d’une variable $args :
get_template_part( 'template-parts/content', 'card', array(
'style' => 'compact',
'show_excerpt' => false,
) );
Et côté fichier template-parts/content-card.php, ces valeurs sont directement accessibles :
<?php
$style = $args['style'] ?? 'normal';
$show_excerpt = $args['show_excerpt'] ?? true;
?>
<article class="post-card post-card--<?php echo esc_attr( $style ); ?>">
<h3><?php the_title(); ?></h3>
<?php if ( $show_excerpt ) : ?>
<p><?php the_excerpt(); ?></p>
<?php endif; ?>
</article>
L’opérateur de coalescence nulle ?? permet de fournir une valeur par défaut propre si l’argument n’a pas été transmis, ce qui rend le template part utilisable même depuis un ancien appel sans arguments, sans provoquer d’avertissement PHP.
Le crochet get_template_part_{$slug} pour aller plus loin
WordPress 5.5 introduit également le filtre dynamique get_template_part_{$slug}, déclenché juste avant l’inclusion du fichier, avec les arguments en paramètre. Il devient possible d’intercepter ou de modifier ces arguments depuis functions.php sans toucher au fichier appelant :
add_action( 'get_template_part_content-card', function( $slug, $name, $args ) {
if ( is_front_page() && empty( $args['style'] ) ) {
// Log utile en développement pour repérer les appels sans style défini.
error_log( 'content-card appelé sans style sur la page d\'accueil' );
}
}, 10, 3 );
Un cas concret sur trois emplacements
Sur le projet d’un magazine culinaire, la même carte d’article s’affiche à trois endroits : dans la grille de la page d’accueil (variante compacte, sans extrait), dans les résultats de recherche (variante normale, avec extrait tronqué) et dans le widget « Articles liés » en pied de page (variante minimale, titre seul). Avant WordPress 5.5, ces trois usages nécessitaient soit trois fichiers quasi identiques, soit un jonglage avec des variables globales fragiles. Avec $args, un seul fichier suffit :
get_template_part( 'template-parts/content', 'card', array( 'style' => 'compact', 'show_excerpt' => false ) )sur l’accueil.get_template_part( 'template-parts/content', 'card', array( 'style' => 'normal', 'show_excerpt' => true ) )dans la recherche.get_template_part( 'template-parts/content', 'card', array( 'style' => 'minimal', 'show_excerpt' => false ) )dans le widget.
Un template part qui accepte des arguments explicites se lit sans avoir besoin d’ouvrir functions.php pour comprendre d’où vient une variable : c’est tout le gain de cette évolution.
En résumé
Le paramètre $args de get_template_part() ne change rien au fonctionnement de fond de WordPress, mais il rend le code des thèmes classiques nettement plus lisible dès qu’un fragment de gabarit doit varier selon son contexte d’appel. Sur les nouveaux projets démarrés depuis la sortie de la 5.5, cette syntaxe remplace désormais systématiquement les anciens appels à set_query_var() pour ce genre de besoin — les templates parts des futurs thèmes à blocs suivront une logique différente, qui n’est pas encore d’actualité aujourd’hui.