# 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.

- Auteur : Clément Hadrot
- Publié le : 2021-06-04
- Mis à jour le : 2021-06-04
- Catégorie : Thèmes
- URL : https://wpmoderne.dev.wordpress-developpement.fr/themes/wp-body-open-hook-manquant/

## L’essentiel

- 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é

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.

## 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.
