Dans un thème de blocs WordPress, les menus se trouvent dans le bloc Navigation, et non plus dans Apparence > Menus. Voici comment les gérer si vous entretenez un site bâti sur un tel thème. Les ennuis commencent d’habitude après un changement de thème ou une copie depuis la préproduction, quand l’en-tête affiche soudain toutes les pages ou le menu du pied de page. La cause est presque toujours la même : le bloc Navigation désigne un menu enregistré par son identifiant et, quand cet identifiant n’existe plus, il se rabat sans bruit sur un autre menu. Nommez chaque menu, épinglez-y l’en-tête et le pied de page, et vérifiez l’identifiant chaque fois que vous déplacez un site.
Ce que vous allez accomplir
- Voir tous les menus enregistrés sur le site et trouver celui que l’en-tête affiche vraiment.
- Transformer un menu classique en menu de blocs, puis modifier les éléments et les sous-menus.
- Donner des noms clairs aux menus et supprimer sans risque les copies qui traînent.
- Régler le comportement du menu sur téléphone.
- Copier un menu de la préproduction vers la production avec WP-CLI, et réparer les liens qui cassent en route.
Prérequis
- WordPress 6.5 ou plus récent avec un thème de blocs actif. Les libellés cités sont ceux de WordPress 7.x en français du Canada, suivis du libellé anglais entre parenthèses. Quand la version 6.x emploie un autre nom, il est indiqué.
- Un compte Administrateur. Les menus exigent la capacité
edit_theme_options, que les Éditeurs n’ont pas par défaut. - WP-CLI sur le serveur pour les étapes d’inspection et de copie, et
curlsur n’importe quel poste. - Pour l’étape de copie, un accès SSH aux deux sites et une sauvegarde de la base de données cible.
Comment ça fonctionne
Chaque menu de blocs est enregistré comme une publication de type wp_navigation. Son contenu est une liste de blocs : des liens de page (Page Link), des liens personnalisés (Custom Link) et des sous-menus. On y trouve parfois aussi un bloc Liste des pages, qui affiche toutes les pages publiées. Le bloc Navigation de votre en-tête ne contient pas le menu lui-même. Il contient une référence, un attribut comme "ref":123, qui désigne la publication wp_navigation à afficher. L’en-tête se trouve dans une partie de modèle : soit le fichier parts/header.html du thème, soit une copie enregistrée en base de données dès que quelqu’un la modifie dans l’Éditeur de site.
Le schéma montre l’ordre que WordPress suit à chaque chargement de page. Une référence vers un menu publié l’emporte. Sans aucune référence, ce sont les liens enregistrés directement dans le balisage du bloc qui servent. Une référence qui vise un menu absent ou non publié saute ces liens enregistrés. Si ni l’un ni l’autre ne donne d’éléments, WordPress choisit un repli : le menu publié créé le plus récemment, puis une copie convertie d’un menu classique, puis une Liste des pages. Quand il n’existe aucun menu, WordPress peut en créer un intitulé « Navigation » pour ce repli, d’où viennent les doublons inexpliqués.
L’essentiel : une référence invalide n’affiche aucune erreur aux visiteurs. Un menu supprimé, un menu à la corbeille ou un identifiant copié d’un autre site mènent tous au repli. Voilà pourquoi le mauvais menu apparaît sans avertissement.
Étapes
-
Listez les menus du site. Depuis le répertoire de WordPress sur le serveur :
wp post list --post_type=wp_navigation --post_status=any --fields=ID,post_title,post_status,post_dateExemple de sortie :
+-----+--------------+-------------+---------------------+ | ID | post_title | post_status | post_date | +-----+--------------+-------------+---------------------+ | 214 | Navigation 2 | publish | 2026-09-30 13:48:07 | | 187 | Footer | publish | 2026-08-12 10:21:44 | | 123 | Header | publish | 2026-06-03 09:05:31 | +-----+--------------+-------------+---------------------+Un tableau vide veut dire que le site n’a encore aucun menu de blocs et que chaque bloc Navigation affiche un contenu de repli. Dans le tableau de bord, la même liste se trouve sous Apparence > Éditeur > Navigation.
-
Trouvez le menu que votre en-tête utilise. Si quelqu’un a modifié l’en-tête dans l’Éditeur de site, la copie enregistrée est une publication
wp_template_part. Listez ces copies, puis lisez la référence dans l’en-tête :wp post list --post_type=wp_template_part --fields=ID,post_name,post_modified wp post get 231 --field=post_content | grep -o '"ref":[0-9]*'Exemple de sortie :
+-----+-----------+---------------------+ | ID | post_name | post_modified | +-----+-----------+---------------------+ | 231 | header | 2026-10-14 16:32:09 | +-----+-----------+---------------------+ "ref":123Ici, l’en-tête affiche le menu 123, « Header ». Une composition synchronisée (un bloc
wp:blockréutilisable) stocke aussi unref: si vous obtenez plus d’une ligne, le menu est l’identifiant qui figure dans la liste de l’étape 1. S’il n’y a pas de ligneheader, l’en-tête vient du fichier du thème. Vérifiez-le de la même façon :grep -o '"ref":[0-9]*' "$(wp theme path "$(wp theme list --status=active --field=name)" --dir)/parts/header.html"Si aucune des deux commandes ne renvoie rien, le bloc n’a pas de référence : ce sont le repli ou les liens stockés dans le thème qui décident de l’affichage. Si l’identifiant trouvé ne figure pas dans la liste de l’étape 1, vous tenez votre bogue de mauvais menu.
-
Récupérez un menu classique, si vous venez d’un thème classique. Dans l’Éditeur de site, ouvrez l’en-tête et sélectionnez le bloc Navigation. Dans la barre latérale, ouvrez le sélecteur de menu, le bouton à trois points à côté du nom du menu. Sous Importer les menus classiques (Import Classic Menus), choisissez votre ancien menu. WordPress le copie dans une nouvelle publication
wp_navigationet y fait pointer le bloc. C’est une copie unique : les modifications faites plus tard dans Apparence > Menus n’atteignent pas le bloc. -
Modifiez les éléments. Sélectionnez le bloc Navigation et utilisez le bouton + au bout du menu pour ajouter une page ou un lien personnalisé. Depuis WordPress 6.9, la barre d’outils du bloc offre aussi un bouton Ajouter une page. Pour imbriquer un élément, sélectionnez-le et choisissez Ajouter un sous-menu dans la barre d’outils. Si le menu affiche encore une Liste des pages, sélectionnez-la et cliquez sur Modifier pour la transformer en liens de page distincts que vous pouvez réordonner. Ensuite, les nouvelles pages ne s’ajoutent plus automatiquement, ce qui convient d’habitude à un en-tête. Enregistrez en haut à droite.
-
Nommez chaque menu et supprimez les copies qui traînent. Sélectionnez le bloc Navigation et ouvrez le panneau Avancé. Réglez Nom du menu (Menu name) à « Header », ou à « Footer » dans le pied de page. Des noms comme « Navigation 2 » rendent le mauvais choix facile plus tard. Avant de supprimer un menu en trop, vérifiez qu’aucun modèle ni aucune partie de modèle n’y fait référence :
for id in $(wp post list --post_type=wp_template,wp_template_part --format=ids); do wp post get "$id" --field=post_content | grep -o '"ref":[0-9]*'; done | sort -uExemple de sortie :
"ref":123 "ref":187Vérifiez aussi les fichiers des dossiers
parts/ettemplates/du thème avec legrepde l’étape 2. Un menu dont l’identifiant n’apparaît nulle part, ici 214, peut être supprimé depuis Apparence > Éditeur > Navigation avec son action Supprimer. Supprimer un menu ne supprime jamais les pages vers lesquelles il pointe. -
Réglez le comportement sur téléphone. Le bloc Navigation sélectionné, ouvrez l’onglet Réglages. Réglez Visibilité de la superposition (Overlay Visibility) sur Mobile, ce qui replie le menu derrière une icône sur les petits écrans. Réglez Visibilité du sous-menu (Submenu Visibility) sur Clic (Click) si vos sous-menus contiennent plus de quelques liens, car les menus au survol sont difficiles à utiliser sur un écran tactile. Dans WordPress 6.x, ces réglages sont le menu superposé (Overlay Menu) et la case d’ouverture au clic (Open on click).
-
Copiez un menu vers un autre environnement. Une copie complète de la base de données garde tous les identifiants de menus. Cette étape ne sert donc qu’à déplacer un seul menu, par exemple un nouvel en-tête monté en préproduction. Sur le site source, exportez le contenu du menu :
wp post get 123 --field=post_content > header-menu.htmlTransférez le fichier sur le serveur cible, puis créez-y le menu. Remplacez
adminpar l’identifiant d’un administrateur de ce site :wp post create header-menu.html --post_type=wp_navigation --post_title='Header' --post_status=publish --user=admin --porcelainExemple de sortie :
356Ce nombre est l’identifiant du nouveau menu sur la cible. Ouvrez l’en-tête dans l’Éditeur de site de la cible, sélectionnez le bloc Navigation et choisissez Header sous Menus dans son sélecteur de menu. Vérifiez ensuite les liens de page dans le fichier, car ils stockent des identifiants de pages du site source :
grep -o '"id":[0-9]*' header-menu.html | cut -d: -f2 | paste -sd, - | xargs -I{} wp post list --post_type=page --post__in={} --fields=ID,post_title,post_statusChaque identifiant doit revenir comme une page publiée avec le titre attendu. Un identifiant absent, ou une page au titre différent, veut dire que le site cible a numéroté ses pages autrement. Sélectionnez chacun de ces éléments dans l’éditeur et choisissez de nouveau la bonne page dans ses réglages de lien (le champ Lien vers dans WordPress 7.x).
Valider que ça fonctionne
Comparez les libellés enregistrés dans le menu avec ceux de la page en ligne. D’abord, les libellés enregistrés :
wp post get 123 --field=post_content | grep -oE '"label":"[^"]+"'
Exemple de sortie :
"label":"Services"
"label":"Pricing"
"label":"About"
"label":"Contact"
Puis les libellés que l’en-tête affiche réellement :
curl -s https://www.example.com/ | grep -oE 'wp-block-navigation-item__label">[^<]+' | head -n 10
Exemple de sortie :
wp-block-navigation-item__label">Services
wp-block-navigation-item__label">Pricing
wp-block-navigation-item__label">About
wp-block-navigation-item__label">Contact
Les libellés d’un menu de pied de page sur la même page viennent après ceux-ci ; c’est pourquoi la sortie est limitée à 10 lignes. C’est terminé quand les libellés de l’en-tête correspondent au menu, dans le même ordre, et que la référence de l’étape 2 vise un menu publié. Dans une fenêtre de la largeur d’un téléphone, le menu doit aussi se replier derrière l’icône. Videz le cache de pages avant la vérification avec curl, sinon vous risquez de comparer avec une vieille copie.
Dépannage
- L’en-tête affiche toutes les pages du site. Le bloc a atteint le dernier repli, une Liste des pages. Sa référence est absente, vise un menu supprimé ou un menu à la corbeille. Sélectionnez le bloc et choisissez le bon menu sous Menus dans son sélecteur de menu. Si le menu est à la corbeille, restaurez-le avec
wp post update 123 --post_status=publish. - L’en-tête affiche le menu du pied de page, ou un ancien menu. C’est la même cause, une étape de repli plus tôt. WordPress a pris le menu publié créé le plus récemment. Corrigez la référence comme ci-dessus, puis renommez les menus pour que le choix soit évident.
- De nouveaux menus « Navigation » apparaissent sans cesse. Un bloc sans référence et sans menu de repli peut amener WordPress à en créer un. Chaque clic sur Créer un nouveau menu (Create new Menu) en crée aussi un. Épinglez chaque bloc Navigation à un menu nommé, puis supprimez les copies inutiles après la vérification de l’étape 5.
- Un lien a disparu après une copie ou un changement de page. Un lien de page ne s’affiche que si la page qu’il stocke par identifiant existe et est publiée. Republiez la page, ou choisissez de nouveau la cible du lien dans l’éditeur.
- Les changements dans Apparence > Menus n’ont aucun effet. Les thèmes de blocs ne lisent pas les menus classiques à l’affichage. Importez le menu classique une fois (étape 3) et modifiez-le ensuite dans l’Éditeur de site.
Quand cette approche ne convient pas
Si votre site utilise encore un thème classique, continuez d’utiliser Apparence > Menus et les emplacements de menus du thème. Les menus de blocs sont faits pour les modèles et les parties de modèle d’un thème de blocs, et l’en-tête d’un thème classique ne les lit jamais. Notre comparaison des thèmes de blocs et des thèmes classiques vous aidera si vous pesez le changement.
Les menus de plus d’une centaine d’éléments, ou les grands méga-menus, fatiguent l’éditeur du bloc Navigation autant qu’ils fatiguaient l’ancien. Les solutions de structure se trouvent dans gérer les menus WordPress à grande échelle. Si vos changements à l’en-tête semblent disparaître après une mise à jour du thème, la partie de modèle elle-même a peut-être été remplacée ; consultez les conflits de parties de modèle. Chaque bloc et chaque réglage cités ici sont décrits dans la documentation du bloc Navigation.
Un WordPress qui rapporte vraiment mérite un opérateur — Stack Harbor opère cette pile sous WordPress Entreprise ; réservez une consultation d’infrastructure.