WordPressは1つのデータベースの中に複数のサイト(プロジェクト)を作成することができる。
この特性を利用してサイトを複数展開していくとデータベースの中のテーブルが増え、どのプロジェクトのテーブルなのかも識別が難しい状態になってしまう。
下図は複数のWordpressサイトを一つのデータベースに展開したときの例。スクロールバーがあと10倍ほどテーブルがあることを暗示している、、
テーブルの識別方法
この状態でも、どのテーブルがどのサイトと紐付いているかを識別することは可能。
データベースの中の各テーブルにはサイト毎に固有の接頭語(prefix)がついている。確認するには、プロジェクトのルートディレクトリにある wp_config.php をエディタで開く。
この中の60行目あたりに、$table_prefix という変数があり、ここで指定されている文字列が、このプロジェクトのテーブルの接頭語になる。
/**
* WordPress データベーステーブルの接頭辞
*
* それぞれにユニーク (一意) な接頭辞を与えることで一つのデータベースに複数の WordPress を
* インストールすることができます。半角英数字と下線のみを使用してください。
*/
$table_prefix = 'wp20210427204318_';
上記例の場合、「wp20210427204318_」がついているテーブル名が、このサイトのテーブルになる。
phpMyAdminで絞り込みをかければ該当するテーブルが出てくる。スクロールせずに全貌が確認できる数になった。
プロジェクト毎にテーブルの接頭語を変更する方法
「wp20210427204318_」のような数値で割り振られた接頭語でもプロジェクト毎にテーブルを分類することはできるが、視認性がとても悪い。接頭語は一度プロジェクトを作ってしまった後からでも変更が可能。
接頭語変更の流れ
- バックアップを取る
- phpMyAdminでテーブル名を変換する
- wp_config.phpファイルを編集する
- ブラウザで表示確認する
バックアップを取る
WordPressのコアになるテーブルに変更を加えるので、まずはバックアップを取得する。
バックアップをとるには「UpdraftPlus WordPress Backup Plugin」が便利。使い方の詳細は下記ご参照。
【画像で解説】WordPressで簡単にバックアップを取る方法。おすすめプラグインUpdraftPlus WordPress Backup Pluginの使い方手順を解説。
他の方法として、FTPソフトでサーバーからごっそりダウンロードすることもできる。FTPソフトとしても評判の高いWinSCPの使い方は以下。
【画像で解説】WinSCPの使い方。無料FTPソフトでサーバーと接続しファイルをダウンロード・アップロードする方法
phpMyAdminにログインする
バックアップの取得が完了したら、phpMyAdminでテーブル名を変換する。まずは、phpMyAdminにログインする。ログイン方法については以下ご参照。
【WordPress】データベースの中身を確認する方法。phpMyAdminへのログイン方法。ユーザー名・パスワード・サーバー(ホスト)名はどこにあるか。
phpMyAdminでテーブル名を変換する
phpMyAdminにログインしたら、いよいよテーブル名を変換を行う。
左カラムで対象のデータベースを選択すると「構造」タブにテーブルの一覧が表示されます。
接頭語を変換する全てのテーブルにチェックマークをつける。ctrl + f で表示された検索窓に、$table_prefix の $table_prefix の値を入力するとハイライトされわかりやすい。
チェックが完了したら、下部にある「チェックしたものを:」のプルダウンから「テーブル名の接頭語を付け替える」を選択する。
その下の「接頭辞を付け替えてテーブルをコピーする」を選択することで元のテーブルは残しておくことができる。
※注意: コピーして作成する場合、ユニークキーを後から追加する作業とidのカラムにauto incrementの設定を付け直す作業が発生するため、あまり推奨でない。ミスると不具合が生じる。(ただし、元のテーブルがあるので簡単に戻せる)
プルダウンを選択すると、「付け替え元」と「付け替え先」が表示されるので、元のテーブルの接頭語と変更後の接頭語をそれぞれ入力し、「実行する」をクリック。
一瞬で作業が完了し、一覧に指定した接頭語のテーブルが表示される。
ユニークキーの付与(接頭辞を付け替えてテーブルをコピー時のみ)
接頭辞を付け替えてテーブルをコピーして作成したテーブルを選択すると、xxx_usersなど中身のあるテーブルの上部に以下のような警告が表示される。
これはコピーしたときに、idカラムのユニークが外れてしまうため発生する。
This table does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available.
ユニークなカラムがないので、グリッドの編集、チェックボックス、編集、コピー、削除機能が使えません
ユニークキーの付与は簡単。テーブルを選択し、上部の「構造」タブをクリックすると、カラムの一覧が表示される。
1番上に表示されているXXX_id(またはid)の右側に「ユニーク」というアイコンがあるので、これをクリックする。
以上で、警告が消えて編集などの操作ができるようになる。
auto_incrementの付与
また、接頭辞を付け替えてテーブルをコピーを行うと、idカラムに設定されていた auto_increment も外れてしまう。このため、auto_incrementを再度適用する。
テーブルを選択し、「構造」タブをクリックする。XXX_id(またはid)の右側に「変更」というアイコンがあるので、これをクリックする。
元のテーブルのカラムの設定と同じように「デフォルト値」を「なし」にして、AI(Auto Increment)のチェックボックスにチェックを入れる。あとは「保存する」をクリックして完了。
この作業を接頭語を変更してコピーしたテーブル行う。
テーブルの中のデータの接頭語を変更する
〇〇_options と 〇〇_usermeta テーブルの中に接頭語を使って生成されたデータが存在するため、この接頭語も変更する必要がある。
※変更しないと、Wordpressの管理画面ページが開けない。
〇〇_optionsの編集
編集するのは、〇〇_user_rolesというデータ。右側の「編集」をクリックする。
編集画面が表示されるので、接頭語を変換したテーブル名に合わせて変更し、「実行」をクリックする。
以上で、〇〇_optionsの編集は完了。
見逃しがないか確認するには、「SQL」タブで以下クエリを実行すると、指定したパターンにマッチする行の一覧が表示される。
SELECT * FROM `prograshi_options` WHERE 'option_name' LIKE '%古い接頭語%'
古い接頭語の部分は「%wp20210427204318_%」のように記述する。
〇〇_usermetaの編集
同様に、〇〇_usermetaテーブルの中にある、この中には複数あるのですべて変更する。
なお、Google SiteKitプラグインを導入している場合は下の方にも表示されるが、これはプラグインを再度設定しなおせば新たな設定のデータが追加されるので、ここで編集する必要はない(編集してもいいが、大変、、)
見逃しがないか確認するには、「SQL」タブで以下クエリを実行すると、指定したパターンにマッチする行の一覧が表示される。
SELECT * FROM `prograshi_usermeta` WHERE `meta_key` LIKE '%古い接頭語%'
古い接頭語の部分は「%wp20210427204318_%」のように記述する。
コマンドでまとめて実行する方法
上記は手動で変更する方法だが、以下SQLクエリで簡単に置換できる。
update `置換後の接頭語_options` set option_value=replace (option_value,'置換前の接頭語','置換後の接頭語');
update `置換後の接頭語_options` set option_name=replace (option_name,'置換前の接頭語','置換後の接頭語');
update `置換後の接頭語_usermeta` set meta_key=replace (meta_key,'置換前の接頭語','置換後の接頭語');
上部で「SQL」を選択して、SQLクエリを貼り付け、「実行」をクリックする。
○行変更しました。と出れば完了。
「wp_config.php」の「$table_prefix」を変更する
サイトのルートディレクトリにある「wp_config.php」の「$table_prefix」を変更する。
/**
* WordPress データベーステーブルの接頭辞
*
* それぞれにユニーク (一意) な接頭辞を与えることで一つのデータベースに複数の WordPress を
* インストールすることができます。半角英数字と下線のみを使用してください。
*/
$table_prefix = 'wp_prograshi_';
保存すれば、データベースのprefixの変更処理は完了。
ブラウザで表示確認する
最後に、ブラウザで正しく表示できるかを確認する。確認するのはサイトと管理画面。
サイトは問題なく表示されている。
管理画面も問題なし。
以上で、Wordpressでテーブルのprefix変更が完了。