WPML
ステータス
未解決
報告対象
WPML Multilingual CMS 4.7.6

問題の概要

カスタムデータベースプレフィックス(デフォルトの「wp_」ではない)と30以上の言語を使用しているサイトでWPMLを使用する場合、翻訳ダッシュボードにアクセスした際にデータベースエラーが発生することがあります。

これは、WPMLプラグインのコードにデータベースプレフィックスがハードコードされていることが原因で発生します。

回避策

続行する前に、サイトの完全なバックアップを取得していることを確認してください。

次のファイルを開きます:

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

以下のコードを探します:

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

次のコードに置き換えます:

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

この変更により、クエリがハードコードされたwp_の代わりに正しいカスタム接頭辞を使用するようになります。

もう1つの箇所は次のファイルにあります:

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

以下のコードを探します:
      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

次のコードに置き換えます:

      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

すべての既知の問題 →