Le WordPress d'aujourd'hui, décodé pour les développeurs

FSE

L’ordre des filtres qui modifient le HTML avant l’enregistrement d’un template

Le balisage saisi dans l'éditeur de site ne correspond pas toujours à celui qui atterrit en base. Comprendre l'ordre des filtres qui interviennent entre les deux évite bien des surprises.

Par Clément Hadrot • 17 janvier 2026 • 4 min de lecture • Aucun commentaire
L'ordre des filtres qui modifient le HTML avant l'enregistrement d'un template

Ce que l’éditeur de site enregistre n’est pas toujours, au caractère près, ce que l’utilisateur a saisi. Entre la validation du contenu dans l’éditeur et l’écriture finale en base de données, plusieurs filtres du cœur ont l’occasion d’intervenir sur le balisage — et leur ordre d’exécution détermine le résultat final, pas seulement leur simple présence.

Ce qui se passe réellement entre la saisie et l’enregistrement

Quand un gabarit est enregistré depuis l’éditeur de site, son contenu passe par le mécanisme standard d’enregistrement des articles, puisque les gabarits sont eux-mêmes stockés comme des contenus du type wp_template. Cela signifie que les filtres habituels qui s’appliquent au contenu d’un article avant sa sauvegarde — notamment content_save_pre — s’appliquent également au balisage d’un gabarit.

Plusieurs de ces filtres sont enregistrés par le cœur lui-même dès son chargement, avec des priorités par défaut. Une extension ou un thème qui ajoute son propre filtre sur ce même point d’entrée, sans préciser explicitement de priorité, s’exécute à la priorité par défaut de add_filter(), qui vaut 10. Si un filtre du cœur intervient également à cette priorité, l’ordre entre les deux dépend alors de l’ordre d’enregistrement effectif au moment de l’exécution, ce qui rend le résultat plus difficile à prévoir sans indiquer une priorité explicite.

Pourquoi cela peut modifier le balisage de façon inattendue

Un filtre ajouté pour une raison précise — par exemple normaliser des guillemets, ou retirer des balises jugées superflues sur du contenu d’article classique — peut s’appliquer sans discernement à tout contenu qui transite par content_save_pre, y compris celui d’un gabarit, si son code ne vérifie pas explicitement le type de contenu concerné.

L'essentiel à retenir : Plusieurs filtres du cœur interviennent avant l'écriture réelle d'un gabarit ; Leur ordre d'exécution suit la priorité déclarée, pas l'ordre d'ajout ; Un filtre ajouté sans priorité explicite s'exécute au rang par défaut

Un exemple concret : un filtre qui retire les attributs style en ligne d’un contenu d’article, pour des raisons de cohérence éditoriale, peut aussi retirer des attributs de style légitimement présents dans certains blocs d’un gabarit, si ce filtre ne restreint pas son action au type de contenu post uniquement.

Identifier la chaîne réelle de filtres en jeu

Une inspection directe reste le moyen le plus fiable de comprendre ce qui s’applique réellement, plutôt que de deviner à partir du résultat final. La fonction $wp_filter, une variable globale du cœur, contient l’ensemble des rappels enregistrés sur chaque hook, classés par priorité :

global $wp_filter;
if ( isset( $wp_filter['content_save_pre'] ) ) {
    error_log( print_r( $wp_filter['content_save_pre'], true ) );
}

Cette inspection, placée temporairement dans un fichier de test ou déclenchée juste avant l’enregistrement d’un gabarit, révèle la liste complète des rappels enregistrés sur ce hook, avec leur priorité respective — un point de départ concret pour localiser celui qui modifie le balisage de façon inattendue.

Restreindre un filtre au bon contexte

La correction la plus robuste consiste à vérifier explicitement le type de contenu concerné avant d’agir, plutôt que de retirer purement le filtre fautif :

add_filter( 'content_save_pre', function( $content, $post_id = 0 ) {
    if ( get_post_type( $post_id ) === 'wp_template' ) {
        return $content;
    }
    // logique de nettoyage propre au contenu d'article ici
    return $content;
}, 10, 2 );

Ce garde-fou préserve le comportement voulu sur les articles classiques, tout en laissant le balisage des gabarits intact.

Ce qu’il faut retenir de la priorité

  • Une priorité plus basse (par exemple 5) place un filtre plus tôt dans la chaîne d’exécution, sur le contenu tel qu’il arrive, avant les transformations des autres filtres.
  • Une priorité plus haute (par exemple 20) place un filtre plus tard, potentiellement sur un contenu déjà modifié par d’autres filtres intervenus avant lui.
  • Deux filtres à la même priorité s’exécutent dans l’ordre de leur enregistrement effectif, ce qui dépend souvent de l’ordre de chargement des extensions — un ordre à ne jamais présumer stable.

Sur les projets qui ajoutent des filtres de contenu génériques, la règle qu’on applique systématiquement : vérifier le type de contenu concerné dès la première ligne du rappel, avant toute logique de transformation.

En résumé

Un balisage qui change entre la saisie et l’enregistrement d’un gabarit n’est presque jamais un comportement du cœur propre aux gabarits : c’est le signe qu’un filtre générique de contenu, pensé pour les articles classiques, s’applique aussi à ce type de contenu par manque de vérification explicite. Inspecter la chaîne réelle de filtres enregistrés reste le moyen le plus direct de retrouver le coupable, plutôt que de chercher du côté de l’éditeur lui-même.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi