# get_template_part et ses arguments : passer des données aux templates

> Le paramètre $args ajouté dans WordPress 5.5 remplace enfin les variables globales et set_query_var pour transmettre proprement des données à un template part.

- Auteur : Clément Hadrot
- Publié le : 2020-09-04
- Mis à jour le : 2020-09-04
- Catégorie : Thèmes
- URL : https://wpmoderne.dev.wordpress-developpement.fr/themes/get-template-part-arguments-args/

## L’essentiel

- Troisième argument $args disponible depuis WP 5.5
- Récupération via la variable $args dans le fichier inclus
- Fin des détours par set_query_var ou les globales

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

> L'essentiel à retenir : Troisième argument $args disponible depuis WP 5.5 ; Récupération via la variable $args dans le fichier inclus ; Fin des détours par set_query_var ou les globales

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.
