インデックス欠落によるWPMLエラー:wp_optionsテーブルがwpml_translation_servicesの複数エントリーで埋まる

弊社のユーザーの一人が、複数のウェブサイトでWP Staging ProとWPML(翻訳管理モジュールを含む)を併用していました。特にそのうちの1つのサイトでは、WP Staging Proを使ってステージングサイトを本番サイトにプッシュすると、すぐにwp_optionsテーブルがwp_nameが’wpml_translation_services‘のエントリーで埋まってしまうという現象が起きていました。これらを削除すると、それ以上のエントリーは作成されなくなりますが…次回のステージングから本番へのプッシュ時に再び発生していました。 このエントリーを追跡したところ、WPMLの翻訳管理モジュールに行き着きました。 WP Staging ProまたはWPMLの翻訳管理のいずれかのみがインストールされている場合、このエントリーは作成されませんが、両方がインストールされた状態でステージングから本番へ変更がプッシュされると、この特定のサイトで問題が再発しました。 WPMLのサポートからこの問題の解決策を提供してもらいましたので、同じエラーに遭遇している方のためにここで公開します: 問題は、wp_optionsテーブルにインデックスが欠けているために起きたようです。optionsテーブルのインデックスは非常に固有かつ重要であり、これが欠けているとどのプラグインやテーマでも問題を引き起こす可能性があります。 サイトの完全バックアップを取得した上で、次の手順を試してください:

  1. PHPMyAdminまたは類似のツールを使ってデータベースサーバーにログインします。
  2. データベースを選択し、まず以下のクエリーを実行します。 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. 次に、以下のクエリーを実行してoptionsテーブルにインデックスを作成します。 ALTER TABLE `wp_options` ADD UNIQUE `option_name` (`option_name`);
  4. 既存のステージングサイトでは同じバグが再発する可能性が高いため、新しいステージングサイトを作成してください。
  5. 新しいステージングサイトで変更を加え、本番サイトにプッシュします。
  6. その後、wpml_translation_servicesの複数のエントリーが発生しているかどうかを確認してください。
Rene Hermenau

著者: Rene Hermenau

著者について: René Hermenau は WP STAGING の創設者です。WordPress のバックアップ、ステージング、移行、データベース処理、安全なデプロイメントワークフローに取り組んでいます。