先日、とあるwordpressサイトのリニューアルを請け負ったときに、テスト環境を作成してログインしようとすると、タイトルに表記のエラーが出ました。原因は、元サイトのデータベースのtableの接頭辞がwp_であったのに、これにきちんとした対応をせずにデータベースを取り扱ったためでした。同じ失敗を繰り返さないためにメモします。
テーブルの接頭辞がwp_だとテスト環境構築がより大変
テスト環境を構築する際のデータベースの取り扱いは、テーブルの接頭辞がwp_でなくともそこそこ面倒です。
しかし、テーブルの接頭辞がwp_だと、テスト環境のテーブル接頭辞をwp_以外のものに変更しなければならない場合、さらに大変になります。
作業環境
具体的に以下のような作業環境の場合で考えて見ます。
- 元のサイトアドレス:webshufu.com
- テスト環境のサイトアドレス:example.com
- 元のWordPress アドレス:webshufu.com/blog
- テスト環境のWordPress アドレス:example.com/blog
- 元サイトのデータベース接頭辞:wp_
- テスト環境サイトのデータベース接頭辞:example_
作業手順
テスト環境構築の作業手順は、テーブルの接頭辞がwp_ではない場合と、同様です。
- まずは、ファイルのコピー・アップロード
- 元サイトからデータベースをエクスポート
- エクスポートしたSQLファイルを修正
- 修正後の.solをテスト環境のデータベースにインポート
しかし、このうちSQLファイルの修正が面倒なことになります。
wp_は接頭辞だけではない
ワードプレスのデータベースには、テーブル接頭辞をwp_としていない場合もwp_を含む文字列が沢山格納されています。
これらは当然接頭辞を表すwp_ではありません。
従って、テーブル接頭辞をwp_としている場合、SQLファイルのテーブル接頭辞修正作業では、数あるwp_を接頭辞を表すものとそうでないものに分類して、接頭辞を表すもののみをexample_に置換しないといけません。
煩雑な接頭辞置換作業
そこで、確実に接頭辞wp_のみをexample_に変換するため、テーブル名単位で置換作業を行います。
- wp_commentmeta⇒example_commentmeta
- wp_comments⇒example_comments
- wp_links⇒example_links
- wp_options⇒example_options
- wp_postmeta⇒example_postmeta
- wp_posts⇒example_posts
- wp_terms⇒example_terms
- wp_term_relationships⇒example_term_relationships
- wp_term_taxonomy⇒example_term_taxonomy
- wp_usermeta⇒example_usermeta
- wp_users⇒example_users
ところがこれで終わりではありません。
ここで作業を終了すると、「このページにアクセスするための十分なアクセス権がありません。」という表示が出てワードプレスの編集作業が一切出来なくなります。
これは、example_optionsテーブルとexample_usermetaの中に接頭辞を表すwp_が残っているからです。これらをexample_に置き換えるため、さらに以下のような置換作業を行います。
- wp_user_roles⇒example_user_roles
- wp_capabilities⇒example_capabilities
- wp_user_level⇒example_user_level
- wp_dashboard_quick_press_last_post_id
⇒example_dashboard_quick_press_last_post_id - wp_user-settings⇒example_user-settings
- wp_user-settings-time⇒example_user-settings-time
これでやっとSQLファイルの修正が完了です。
まとめ
テーブル接頭辞をwp_にすると、セキュリティーが脆くなる上、データベースの取り扱いもめんどくさくなるので注意が必要です。
接頭辞をwp_以外にするよう強くオススメします。