Erreur WPML due à un index manquant : la table wp_options se remplit de plusieurs entrées de wpml_translation_services

L’un de nos utilisateurs faisait tourner WP Staging Pro en parallèle de WPML (avec le module Translation Management) sur plusieurs sites. Sur l’un d’eux en particulier, le fait d’envoyer le site de staging vers le site en production avec WP Staging Pro provoquait immédiatement le remplissage de la table wp_options avec des entrées dont le wp_name était ‘wpml_translation_services‘. Dès qu’elles étaient supprimées, plus aucune entrée n’était créée… jusqu’au prochain push de staging vers la production. Nous avons retracé cette entrée jusqu’au module WPML Translation Management. Si seul WP Staging Pro ou seul WPML Translation Management est installé, cette entrée n’est pas créée, mais lorsque les deux sont installés et que des modifications sont poussées du staging vers la production, le problème réapparaît sur ce site particulier. Le support WPML nous a fourni une solution à ce problème que nous souhaitons publier ici pour toute personne rencontrant la même erreur : Il semble que le problème soit dû à l’absence d’indexation sur la table wp_options. L’index de la table options est très spécifique et essentiel, et tout plugin ou thème pourrait poser problème s’il manque. Veuillez essayer les étapes suivantes après une sauvegarde complète du site :

  1. Connectez-vous au serveur de base de données via PHPMyAdmin ou un outil équivalent.
  2. Sélectionnez la base de données et exécutez d’abord les requêtes suivantes : DELETE FROM `wp_options` WHERE `option_name` = 'wpml_dependencies:needs_validation'; DELETE FROM `wp_options` WHERE `option_name` = 'jetpack_callables_sync_checksum'; DELETE FROM `wp_options` WHERE `option_name` = 'gf_upgrade_lock'; DELETE FROM `wp_options` WHERE `option_name` = 'wpstg_license_key'; DELETE FROM `wp_options` WHERE `option_name` = 'wpstg_license_status'; DELETE FROM `wp_options` WHERE `option_name` = 'wpstg_settings'; DELETE FROM `wp_options` WHERE `option_name` = 'fs_accounts'; DELETE FROM `wp_options` WHERE `option_name` = 'jetpack_plugin_api_action_links'; DELETE FROM `wp_options` WHERE `option_name` = 'jpsq_sync_checkout'; DELETE FROM `wp_options` WHERE `option_name` = 'stats_cache';
  3. Exécutez ensuite la requête suivante pour indexer la table options : ALTER TABLE `wp_options` ADD UNIQUE `option_name` (`option_name`);
  4. Créez un nouveau site de staging, car il y a de fortes chances que le même bug subsiste sur le site de staging existant.
  5. Effectuez des modifications sur le nouveau site de staging et poussez-les vers la production.
  6. Vérifiez ensuite si vous obtenez plusieurs entrées pour wpml_translation_services ou non.
Rene Hermenau

Auteur : Rene Hermenau

À propos de l'auteur : René Hermenau est le fondateur de WP STAGING. Il travaille sur les sauvegardes WordPress, les environnements de staging, les migrations, la gestion des bases de données et les workflows de déploiement sécurisés.