# Post formats en 2020 : un vestige encore utile du thème classique ?

> Hérité de Tumblr, l'attribut post format traîne dans beaucoup de vieux thèmes. Voici ce qu'il change réellement dans la hiérarchie de templates, sans détour par les blocs.

- Auteur : Clément Hadrot
- Publié le : 2020-02-27
- Mis à jour le : 2020-02-27
- Catégorie : Thèmes
- URL : https://wpmoderne.dev.wordpress-developpement.fr/themes/post-formats-vestige-utile-theme-classique/

## L’essentiel

- Neuf formats reconnus par le cœur, pas un de plus
- Le thème doit déclarer add_theme_support('post-formats') explicitement
- La hiérarchie retombe sur single.php si le fichier dédié manque

J'ai repris récemment la maintenance d'un thème conçu en 2013 pour un magazine culturel, où chaque article portait un format différent selon la rubrique : citation pour les portraits, galerie pour les comptes rendus d'exposition, lien pour la revue de presse. Le client m'a demandé si ce mécanisme, qu'il voyait comme une antiquité, valait encore la peine d'être conservé ou s'il fallait tout migrer vers une solution à base de champs personnalisés.

La question mérite qu'on s'y arrête, parce que les post formats sont souvent mal compris : on les confond avec des types de contenu, alors qu'ils ne sont qu'un attribut de présentation appliqué à un article standard. Comprendre ce qu'ils changent vraiment dans le thème classique permet de décider s'il faut les garder, les simplifier ou les remplacer.

## Ce qu'est réellement un post format

Un post format est une métadonnée attachée à un article via une taxonomie interne, `post_format`, invisible dans l'interface de gestion des taxonomies classiques. WordPress reconnaît neuf formats : `aside`, `gallery`, `link`, `image`, `quote`, `status`, `video`, `audio` et `chat`. Aucun thème ne peut en inventer un dixième ; on ne peut que choisir parmi cette liste fermée, contrairement aux catégories ou aux étiquettes.

Sans déclaration explicite dans le thème, ces formats n'ont strictement aucun effet visuel. Il faut appeler `add_theme_support('post-formats', array(...))` dans `functions.php` pour que la case à cocher apparaisse dans l'écran d'édition et que le thème puisse en tirer parti.

```
add_theme_support( 'post-formats', array(
    'aside',
    'gallery',
    'quote',
    'link',
) );
```

> L'essentiel à retenir : Neuf formats reconnus par le cœur, pas un de plus ; Le thème doit déclarer add_theme_support('post-formats') explicitement ; La hiérarchie retombe sur single.php si le fichier dédié manque

## L'effet sur la hiérarchie de templates

C'est le point le plus mal compris : le post format modifie la hiérarchie de templates de la même façon qu'un type de publication personnalisé, mais avec un préfixe dédié. Pour un article au format `quote`, WordPress cherche dans l'ordre `single-post-quote.php`, ensuite le `content-quote.php` si le thème utilise `get_template_part()` avec le second paramètre, avant de retomber sur `single.php`. Cette bascule ne concerne que l'affichage d'un article seul et la boucle de la page d'accueil, jamais les pages statiques.

Dans la pratique, très peu de thèmes créent un fichier `single-post-{format}.php` distinct. La convention la plus répandue consiste plutôt à tester le format à l'intérieur d'un seul template, via la fonction `get_post_format()`, et à ajuster le balisage en conséquence.

```
<?php
$format = get_post_format();
if ( $format === 'quote' ) {
    echo '<blockquote>' . get_the_content() . '</blockquote>';
} else {
    the_content();
}
```

## has_post_format() : le test le plus courant

Plutôt que de comparer une chaîne, la fonction `has_post_format()` est la manière recommandée de tester le format courant dans la boucle. Elle accepte un format unique ou un tableau, ce qui simplifie le regroupement de plusieurs formats sous un même traitement visuel, par exemple `image` et `gallery` traités de façon identique dans une grille.

- `has_post_format( 'video' )` renvoie vrai uniquement si l'article courant porte ce format précis.
- `has_post_format( array( 'image', 'gallery' ) )` teste plusieurs formats en une seule condition.
- Sans argument, la fonction teste le format `standard`, celui par défaut de tout article qui n'a reçu aucune attribution.

## Ce que les formats ne remplacent pas

Un piège classique consiste à vouloir stocker des données structurées dans le format lui-même, par exemple une URL pour le format `link`. Le cœur de WordPress ne fournit aucun champ dédié à cet usage : c'est au thème d'ajouter des champs personnalisés ou d'aller chercher la première URL présente dans le contenu, souvent via une expression régulière ou `wp_extract_urls()`. Le format ne fait qu'orienter l'affichage, il ne stocke rien de plus que son propre nom.

## Faut-il encore les utiliser en 2020 ?

Sur le thème du magazine culturel, j'ai tranché pour la conservation : les neuf formats couvraient bien les usages éditoriaux existants, et remplacer le mécanisme par des champs personnalisés aurait exigé de réécrire l'écran d'édition sans bénéfice réel côté lecteur. Le seul vrai défaut que j'ai corrigé concernait l'absence de filtre par format dans le thème enfant, ajouté via un lien construit avec `get_post_format_link()`.

> Je ne recommande jamais d'introduire les post formats sur un thème neuf en 2020 : ils restent pertinents en maintenance, rarement comme choix de conception pour un projet qui démarre.

## En résumé

Les post formats ne créent aucun contenu nouveau : ils étiquettent un article parmi neuf catégories fixes et modifient la hiérarchie de templates ainsi que les fonctions de test disponibles dans la boucle. Un thème classique qui les exploite bien peut continuer à s'appuyer dessus sans complexe, tant qu'on ne cherche pas à leur faire porter plus qu'ils ne peuvent : un simple aiguillage d'affichage, rien d'autre.
