# Un menu dupliqué en trois langues perd son ordre après réorganisation Polylang

> Un glisser-déposer dans l'éditeur de menus modifie l'ordre des éléments dans une seule langue, laissant les deux autres menus désynchronisés sans avertissement.

- Auteur : WordPress Développement
- Publié le : 2023-07-20
- Mis à jour le : 2023-07-20
- Catégorie : Multilingue
- URL : https://www.wpmoderne.fr/multilingue/menu-duplique-trois-langues-perd-ordre-polylang/

## L’essentiel

- Chaque langue possède son propre menu indépendant sous Polylang
- Un glisser-déposer ne touche que le menu affiché à l'écran
- Une synchronisation manuelle reste nécessaire après toute réorganisation

« Le menu anglais n'est plus dans le même ordre que le menu français, alors que personne n'a touché à l'anglais » : c'est le signalement reçu par l'équipe technique d'un site vitrine traduit en français, anglais et allemand avec Polylang, après qu'un responsable marketing a réorganisé l'ordre des rubriques du menu principal en glissant-déposant les éléments dans l'éditeur de menus WordPress.

Ce diagnostic reconstitue pourquoi ce comportement, bien que déroutant au premier abord, correspond en réalité au fonctionnement normal de Polylang, et ce qu'il implique en termes de process pour toute équipe éditoriale gérant plusieurs langues.

## Symptôme : un ordre qui diverge silencieusement entre les langues

Le responsable marketing a réorganisé le menu français depuis l'écran **Apparence > Menus**, en faisant remonter la rubrique « Nos formations » avant « À propos ». Cette modification s'est bien appliquée au menu affiché sur les pages françaises. Mais le menu anglais, lui, a continué d'afficher « À propos » avant « Our trainings », dans l'ordre initial, sans qu'aucun message n'ait signalé cette divergence à l'utilisateur au moment de l'enregistrement.

## Diagnostic : un menu par langue, totalement indépendant

Sous Polylang, chaque langue du site possède son propre menu WordPress, enregistré séparément dans la table `wp_terms` associée au type de taxonomie `nav_menu`. Ces menus peuvent être liés entre eux via l'écran de traduction des menus de Polylang, qui permet d'associer un menu français à son équivalent anglais pour l'affichage, mais cette association ne synchronise jamais automatiquement leur structure interne : l'ordre, l'ajout ou la suppression d'éléments dans l'un n'a aucun effet sur les autres.

> L'essentiel à retenir : Chaque langue possède son propre menu indépendant sous Polylang ; Un glisser-déposer ne touche que le menu affiché à l'écran ; Une synchronisation manuelle reste nécessaire après toute réorganisation

```
// Simplification de ce que fait Polylang lors du rendu du menu
$menu_id = pll_current_language() === 'en'
    ? get_option( 'polylang_menu_en' )
    : get_option( 'polylang_menu_fr' );

wp_nav_menu( array( 'menu' => $menu_id ) ); // deux menus indépendants
```

Ce comportement n'est pas un dysfonctionnement : c'est un choix d'architecture volontaire de Polylang, qui autorise justement des menus de structure différente d'une langue à l'autre, par exemple pour retirer une rubrique qui n'a pas de sens dans une langue donnée, ou en ajouter une spécifique à un marché.

## Pourquoi cette flexibilité devient un piège en pratique

Le problème n'est pas la flexibilité elle-même, mais l'absence de rappel visuel au moment où une équipe éditoriale réorganise un menu : rien dans l'écran **Apparence > Menus** n'indique que cette action ne concerne que la langue actuellement sélectionnée, ni ne propose de répercuter le changement sur les menus liés des autres langues.

## Le correctif de process : une checklist après toute réorganisation

Faute de synchronisation automatique fournie par Polylang pour l'ordre des éléments de menu, la solution retenue est organisationnelle plutôt que technique : toute réorganisation de menu doit être suivie d'une vérification manuelle des menus liés dans les autres langues, formalisée par une checklist courte remise à l'équipe éditoriale.

1. Noter l'ordre des éléments avant modification, par une capture d'écran rapide.
2. Appliquer la réorganisation sur le menu de la langue concernée.
3. Basculer le sélecteur de langue de l'écran des menus vers chacune des autres langues.
4. Reproduire manuellement le même ordre sur chaque menu lié, élément par élément.

## Une alternative technique pour les équipes plus outillées

Pour une équipe disposant de ressources de développement, une alternative consiste à écrire un script WP-CLI qui lit l'ordre des éléments du menu source via `wp menu item list` et réapplique le même ordre relatif aux menus liés grâce à `wp menu item update`, en s'appuyant sur une correspondance préalable entre identifiants d'éléments équivalents dans chaque langue.

```
wp menu item list "Menu principal FR" --fields=ID,title,menu_order --format=table
```

Ce script reste un palliatif : il automatise la répétition d'une réorganisation déjà décidée, mais ne remplace pas la vérification humaine du sens de chaque rubrique dans la langue cible, qui reste indispensable.

## En résumé

Polylang traite chaque menu de langue comme une entité indépendante par conception, ce qui permet une vraie flexibilité éditoriale mais expose à des divergences d'ordre silencieuses dès qu'une réorganisation n'est pas répercutée manuellement. Une checklist courte après chaque modification de menu suffit à éviter ce désagrément, bien plus efficacement qu'une tentative de configuration technique pour forcer une synchronisation que Polylang ne propose pas nativement.
