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.

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.
Un ajout sûr, jamais un correctif de header ou de footer
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.