Deux liens identiques, côte à côte, intitulés tous deux « Calendrier » : c’est ce qu’affiche soudain le menu principal traduit d’un site de club sportif, quelques minutes après une mise à jour de routine de l’extension multilingue installée sur le site.
Aucun message d’erreur, aucune trace dans les journaux : seulement ce doublon visuel, présent sur toutes les pages du site et dans les deux langues proposées, français et néerlandais. L’administrateur du club, peu technique, a d’abord supposé une fausse manipulation de sa part lors d’une modification récente du menu.
Symptôme
Le lien « Calendrier » apparaît deux fois consécutivement dans le menu principal, avec la même destination exacte. Les autres liens du menu, eux, restent corrects. Le problème touche les deux langues du site de façon identique, ce qui exclut d’emblée un problème de traduction propre à l’extension multilingue.
Diagnostic
Une vérification dans l’éditeur de menus de WordPress montre que la structure du menu, telle qu’enregistrée en base, ne contient qu’un seul élément « Calendrier ». Le doublon n’existe donc pas dans les données, mais dans leur affichage : le suspect naturel devient le cache des menus, mécanisme interne de WordPress qui stocke la structure calculée d’un menu pour éviter de la reconstruire à chaque affichage de page.
// Vider le cache de menu par programmation, pour test de diagnostic
wp_cache_delete( 'last_changed', 'terms' );
delete_transient( 'wpml_menu_cache_' . $menu_id ); // exemple selon l'extension multilingue utilisée
Après une modification de la structure du menu par l’extension multilingue lors de sa mise à jour (ajout d’un mécanisme interne de correspondance entre versions linguistiques du menu), l’ancien cache, non invalidé automatiquement, continuait de renvoyer une version fusionnant l’ancienne et la nouvelle structure du menu, d’où le doublon visible.

Correctif
Le correctif s’est déroulé en deux temps, du plus simple au plus définitif :
- vider manuellement le cache d’objets de WordPress, via l’interface d’administration ou une commande WP-CLI dédiée
- vérifier ensuite le cache de l’hébergement lui-même, souvent activé en parallèle, qui peut conserver une version de page générée avant l’invalidation du cache interne
- reconstruire le menu à la main, en supprimant puis recréant l’élément concerné, pour forcer une régénération complète de la structure mise en cache
wp cache flush
wp transient delete --all
Dans ce cas précis, le cache d’objets suffisait à corriger le problème : le cache de l’hébergement, basé sur une durée d’expiration courte, s’est purgé de lui-même dans l’heure suivante sans intervention supplémentaire.
Prévention
Après cet incident, une procédure a été ajoutée à la checklist de mise à jour du site : purger systématiquement le cache des menus après toute mise à jour d’une extension multilingue connue pour modifier la structure des menus, plutôt que d’attendre un signalement du client pour s’en apercevoir.
Cette checklist a été étendue à d’autres sites gérés en parallèle, avec un principe simple retenu par l’équipe : toute mise à jour d’une extension touchant à la structure des menus, aux widgets ou à la navigation déclenche automatiquement une purge de cache, sans attendre de constater un dysfonctionnement visible. Ce réflexe, coûteux en apparence puisqu’il ajoute une étape systématique, a évité au moins deux incidents similaires sur d’autres sites du même client au cours de l’année suivante.
Un dernier enseignement concerne la communication avec le client final : plutôt que d’expliquer en détail le mécanisme du cache, souvent difficile à comprendre pour un administrateur peu technique, il a suffi de préciser qu’un doublon visuel de ce type se résout presque toujours en quelques minutes et ne traduit jamais une perte de données réelle. Cette précision, transmise dès le premier échange, a nettement apaisé l’inquiétude initiale du client.
Un doublon visuel qui touche toutes les langues de la même façon pointe presque toujours vers un problème de cache ou de gabarit, jamais vers la logique de traduction elle-même, qui opère habituellement langue par langue.
En résumé
Le doublon de lien dans un menu traduit venait d’un cache de menu non invalidé après une mise à jour ayant modifié la structure interne stockée par l’extension multilingue. Isoler le problème entre les données réelles du menu et sa version mise en cache reste le premier réflexe à adopter face à ce type de symptôme visuel sans message d’erreur associé.