何が問題?
WordPressサイトを移動したり複製したりする際に、標準の接頭辞(prefix) wp_
を変更したくなる場合があります。ところが実はコレ、初期セットアップ時に設定するのであれば問題ないのですが、運用後に接頭辞の変更をする際は若干気をつける必要があります。
通常、WordPressの接頭辞を変更する場合、以下のような作業になるかと思います。
- 直接テーブル名を新しい接頭辞に修正する。(または、DBダンプファイルのテーブル名を修正してリストアするなど)
wp-config.php
を開き、接頭辞wp_
を変更する。- 公開画面/管理画面の動作確認をして完了。
ところがこのままですと、管理画面へログイン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='';
phpMyAdmin や Adminer 等のSQL実行ツールなどを使用して書き換えるといいでしょう。もちろんバックアップダンプは取りつつ。
さあ、これで晴れて正常にログインできるようになったはずです。
半ば諦めかけていた人に光りあれ!
ご注意
ひとつご注意ですが、DBの中も書き換え必要だからといって、Better Search Replace のような文字列一括書き換えツールを使用してはいけません。不必要な箇所まで書き換えてしまい、表示やログインに不具合が出る恐れがあります。