vendredi 25 septembre 2026

À propos

Contact

Thèmes

wp_body_open : le hook qui manquait à la moitié des thèmes avant 5.2

Un plugin de tracking refuse de s'installer proprement faute d'un hook juste après la balise body. Ce que fait wp_body_open et pourquoi tant de vieux thèmes l'ignorent encore.

Par Clément Hadrot • 4 juin 2021 • 5 min de lecture • Aucun commentaire
wp_body_open : le hook qui manquait à la moitié des thèmes avant 5.2

Un client e-commerce voulait installer Google Tag Manager selon la méthode recommandée par Google elle-même : un extrait de code à placer juste après l’ouverture de la balise <body>, en plus du script classique dans le <head>. Le thème en place, hérité d’un prestataire précédent et jamais mis à jour depuis 2018, ne proposait aucun point d’accroche à cet endroit précis. Résultat : le tag de suivi du contenu visible en amont du rendu (le fameux « noscript » de secours) ne se déclenchait jamais correctement.

Ce cas est révélateur d’un problème plus large de compatibilité entre vieux thèmes et outils modernes, que le hook wp_body_open a justement été conçu pour résoudre. Voici ce qu’il fait exactement, et pourquoi tant de thèmes plus anciens que la version 5.2 en sont dépourvus.

Ce que fait concrètement wp_body_open

Introduit dans WordPress 5.2, sorti en mai 2019, wp_body_open() est une simple fonction qui déclenche l’action du même nom, à appeler manuellement dans le fichier header.php du thème, immédiatement après la balise ouvrante <body>. Son unique rôle est de fournir un point d’ancrage fiable à cet emplacement précis, symétrique du hook wp_head qui existe depuis longtemps pour la zone <head>, et de wp_footer pour la fin du document.

<body <?php body_class(); ?>>
<?php wp_body_open(); ?>

<div id="page" class="site">

Sans cet appel dans le thème, aucun code accroché à l’action wp_body_open ne s’exécute jamais : les plugins qui en dépendent se retrouvent alors sans solution propre, obligés de recourir à des méthodes plus fragiles comme la manipulation du tampon de sortie ou l’injection via JavaScript après le chargement de la page.

L'essentiel à retenir : Le hook s'exécute juste après l'ouverture de la balise body ; Introduit en version 5.2, absent de tout thème plus ancien ; Son oubli casse le Google Tag Manager et certains outils d'accessibilité

Pourquoi tant de thèmes plus anciens l’ignorent

Le hook n’existait tout simplement pas avant mai 2019 : aucun thème conçu avant cette date ne pouvait l’implémenter, par définition. Le vrai problème vient des thèmes créés après cette date mais qui n’ont jamais reçu la mise à jour correspondante, ou des thèmes de type « boilerplate » figés au moment de leur téléchargement initial. Un thème basé sur une version ancienne d’Underscores, par exemple, n’aura wp_body_open() que si son header.php a été régénéré ou patché manuellement après la mise à jour du starter theme officiel.

Sur le projet e-commerce, le thème datait de 2018, donc antérieur au hook par construction. La correction a consisté à ajouter la ligne manquante dans header.php, une opération sans risque puisqu’elle n’ajoute qu’un point d’ancrage vide tant qu’aucun code ne s’y accroche.

Les cas d’usage qui en dépendent réellement

  • Google Tag Manager, dont l’extrait <noscript> officiel doit être placé juste après <body> pour fonctionner sans JavaScript.
  • Certains outils d’accessibilité qui injectent un lien d’évitement (« skip to content ») directement après l’ouverture du corps de page, avant même l’en-tête visuel.
  • Des plugins de bannières de consentement RGPD qui souhaitent bloquer visuellement le contenu avant tout autre script, sans dépendre d’un hook plus tardif comme wp_footer.
  • Des widgets de chat en direct qui demandent explicitement ce point d’insertion dans leur documentation d’installation manuelle.

Sans wp_body_open, ces outils se rabattent souvent sur wp_footer, ce qui fonctionne à peu près pour un script de tracking asynchrone mais casse complètement l’intention du <noscript> de Google Tag Manager, censé apparaître au tout début du corps de la page pour les navigateurs sans JavaScript.

Comment vérifier si un thème le supporte

La vérification est rapide : rechercher wp_body_open dans les fichiers du thème, en particulier header.php. Une recherche en ligne de commande évite d’ouvrir chaque fichier un par un.

grep -rn "wp_body_open" wp-content/themes/nom-du-theme/

Si la commande ne renvoie rien, le hook est absent et peut être ajouté sans risque de régression, à la seule condition de le placer au bon endroit : juste après <body <?php body_class(); ?>>, avant tout autre balisage structurel du thème.

Ajouter wp_body_open() à un thème existant ne modifie rien au rendu visuel tant qu’aucun plugin ne s’y accroche : c’est un point d’ancrage neutre par nature. Ce n’est ni un remplacement de wp_head, ni une alternative à wp_footer : les trois hooks coexistent et couvrent chacun un emplacement distinct du document, sans se substituer l’un à l’autre.

J’ajoute désormais systématiquement wp_body_open() à tout thème client en maintenance, même en l’absence de besoin immédiat : le coût est nul et cela évite une intervention d’urgence le jour où un outil tiers en aura besoin.

En résumé

wp_body_open comble une lacune historique de WordPress en offrant un point d’ancrage juste après l’ouverture de la balise <body>, indispensable à certains outils de tracking et d’accessibilité modernes. Son absence dans un thème signale simplement que celui-ci n’a jamais reçu de mise à jour depuis avant mai 2019, et l’ajouter reste une opération rapide et sans risque pour retrouver la compatibilité attendue.

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