WordPressの接頭辞を変えたらログインできなくなっちゃった!時の対処法

何が問題?

WordPressサイトを移動したり複製したりする際に、標準の接頭辞(prefix) wp_ を変更したくなる場合があります。ところが実はコレ、初期セットアップ時に設定するのであれば問題ないのですが、運用後に接頭辞の変更をする際は若干気をつける必要があります。

通常、WordPressの接頭辞を変更する場合、以下のような作業になるかと思います。

  1. 直接テーブル名を新しい接頭辞に修正する。(または、DBダンプファイルのテーブル名を修正してリストアするなど)
  2. wp-config.php を開き、接頭辞 wp_ を変更する。
  3. 公開画面/管理画面の動作確認をして完了。

ところがこのままですと、管理画面へログインID/PWを入力し認証した途端、

このページにアクセスするための十分なアクセス権がありません。

という辛辣なメッセージが表示されます。
なんでや・・。

実は、まだ書き換えなくてはならない箇所があるのです。

DBレコードの中にも変更の必要箇所あり

設定ファイルの接頭辞も変え、DBテーブル名も変えたのに、上記エラーメッセージが出てログインが出来ないのは、DBレコードの値の一部に以前の古い接頭辞が記録されているためです。

以下の方法で直接DBの値を書き換えることで対処が可能です。
例として、接頭辞 wp_XXX_ に変更した場合のSQLを掲載しますので、適宜読み替えてください。(DBテーブル名は既に新しい接頭辞に変更済みとします)

UPDATE XXX_options SET option_name='XXX_user_roles' WHERE option_name='wp_user_roles';
UPDATE XXX_usermeta SET meta_key='XXX_capabilities' WHERE meta_key='wp_capabilities';
UPDATE XXX_usermeta SET meta_key='XXX_user_level' WHERE meta_key='wp_user_level';
UPDATE XXX_usermeta SET meta_key='XXX_dashboard_quick_press_last_post_id' WHERE meta_key='wp_dashboard_quick_press_last_post_id';
UPDATE XXX_usermeta SET meta_key='XXX_user-settings' WHERE meta_key='wp_user-settings';
UPDATE XXX_usermeta SET meta_key='XXX_user-settings-time' WHERE meta_key='wp_user-settings-time';
UPDATE XXX_usermeta SET meta_key='XXX_media_library_mode' WHERE meta_key='';

phpMyAdminAdminer 等のSQL実行ツールなどを使用して書き換えるといいでしょう。もちろんバックアップダンプは取りつつ。

さあ、これで晴れて正常にログインできるようになったはずです。

半ば諦めかけていた人に光りあれ!

ご注意

ひとつご注意ですが、DBの中も書き換え必要だからといって、Better Search Replace のような文字列一括書き換えツールを使用してはいけません。不必要な箇所まで書き換えてしまい、表示やログインに不具合が出る恐れがあります。

参考にさせていただいたサイト