WPML
Statut
Ouvert
Signalé pour
WPML Multilingual CMS 4.7.6

Aperçu de l’anomalie

Lorsque vous utilisez WPML sur un site avec un préfixe de base de données personnalisé (et non le préfixe par défaut « wp_ ») et 30 langues ou plus, vous pouvez rencontrer une erreur de base de données en visitant le tableau de bord de traduction.

Cela est dû à un préfixe de base de données codé en dur dans le code de l’extension WPML.

Solution de contournement

Assurez-vous d’avoir une sauvegarde complète de votre site avant de procéder.

Ouvrez :

/wp-content/plugins/sitepress-multilingual-cms/vendor/wpml/wpml/src/Infrastructure/WordPress/Component/Item/Application/Query/SearchQuery/QueryBuilder/ManyLanguagesStrategy/SearchQueryBuilder.php

Recherchez :

LEFT JOIN wp_icl_translations target_t
   ON target_t.trid = source_t.trid
       AND target_t.language_code IN ({$gluedEscapedLanguageCodes})
LEFT JOIN wp_icl_translation_status target_ts
   ON target_ts.translation_id = target_t.translation_id

Remplacez par :

LEFT JOIN {$this->queryPrepare->prefix()}icl_translations target_t
   ON target_t.trid = source_t.trid
       AND target_t.language_code IN ({$gluedEscapedLanguageCodes})
LEFT JOIN {$this->queryPrepare->prefix()}icl_translation_status target_ts
   ON target_ts.translation_id = target_t.translation_id

Cette modification garantit que la requête utilise le préfixe personnalisé correct au lieu du préfixe wp_ codé en dur.

Un autre emplacement se trouve dans :

/wp-content/plugins/sitepress-multilingual-cms/vendor/wpml/wpml/src/Infrastructure/WordPress/Component/Item/Application/Query/SearchQuery/QueryBuilder/ManyLanguagesStrategy/SearchPopulatedTypesQueryBuilder.php

Recherchez :
      LEFT JOIN wp_icl_translations target_t
         ON target_t.trid = source_t.trid
             AND target_t.language_code IN ({$gluedEscapedLanguageCodes})
       LEFT JOIN wp_icl_translation_status target_ts
         ON target_ts.translation_id = target_t.translation_id

remplacez par :

      LEFT JOIN {$this->queryPrepare->prefix()}icl_translations target_t
         ON target_t.trid = source_t.trid
             AND target_t.language_code IN ({$gluedEscapedLanguageCodes})
       LEFT JOIN {$this->queryPrepare->prefix()}icl_translation_status target_ts
         ON target_ts.translation_id = target_t.translation_id

Toutes les anomalies connues →