
どうもタスです。
「「XAMPP」を利用したWordPressのローカル環境構築 その3」でお話ししたとおり、私はマルチドメイン(マルチサイト)化して「タスLife」と別個でもう1つのブログの計2サイトを運営しています。
とは言え、タスLifeでない方のブログは一切更新していません(真っ新状態です…)。
後で書きますが、マルチサイトだと不便なことも多々あるので、どうにかタスLifeを分離して、シングルサイト構成で運営したいなと常々思いながら1年以上が過ぎていました。
じゃぁ何で早く対応しなかったの?と思われますが、それはタスLifeは親サイトでなく子サイトで運営していたので、分離手順が多少面倒だということを知っていたからです。
しかし、今回、ようやく重い腰を上げてシングルサイト化しました!
ということで、対応した内容を纏めるとともに、同じ悩みを抱えるWordPress運営者に向けて手順を具体的に且つ分かり易く説明したいと思います!
この記事の目次
- 1 マルチサイトとは?
- 2 マルチサイトをシングルサイト化することの問題点
- 3 子サイト分離手順とローカル環境で起きた問題
- 4 本番環境のシングルサイト化
- 4.1 1. ファイル類とDBのバックアップを取得
- 4.2 2. テーブル名の先頭部分「wp2_[子サイト番号]_」を「wp2_」に置換する
- 4.3 3. 稼働中のwordpressを削除する
- 4.4 4. 新規wordpressを作成する
- 4.5 5. バックアップした「wp-content」を新規環境に上書きする
- 4.6 6. 画像ファイルの移動
- 4.7 7. エクスポートしたSQLファイルのDBデータをインポートする
- 4.8 8. Search-Replace-DB-masterで置換処理
- 4.9 9. 動作確認
- 4.10 10. 「robots.txt」や「ads.txt」をアップロード
- 4.11 11. 「.htaccess」の編集
- 5 まとめ
- 6 参考サイト
マルチサイトとは?
普通は1つのWordPressに1つのサイトを運営しますが、1つのWordPressの中で複数のサイトを運営することをマルチサイトと言います。
複数サイトを運営する際に、サイト数だけWordPressをインストールして運営するのは億劫ですよね。
私も当初はそういう思いでマルチサイト化を決めました。
マルチサイトのメリット・デメリットは大体以下のとおりになります。
メリット
- 1つのWordPressをインストールするだけで複数サイトを運営できる
- テーマやプラグインのインストールを一元管理できる
デメリット
- マルチサイトに対応していないプラグインがある
- WordPressに障害があると全てのサイトに影響がある
- マルチサイトを解消するのがとても面倒(特に子サイトの分離)
結局、私は複数サイトの運営をすることが無かったので、モロにデメリットのみを受ける状態でサイト運営していました。
むしろ、メリットとして挙げている一元管理さえもデメリットになっていました(サイトは1つなので…)。
特に不便だと感じた部分は、マルチサイトの場合は使用できるプラグインに制限があることです。
キャッシュを制御する「WP Fastest Cache」というプラグインがインストールできなくて発覚しました。
それに、複数サイトを運営している以上、各種リソース(DB等)も食っていることが間違いないのでシングルサイト化したい気持ちが次第に強くなっていきました。
マルチサイトをシングルサイト化することの問題点
マルチサイトは、メインとなるサイトを選定する必要があります。そのメインサイトのことを「親サイト」と言います。
それに対して、その他のサイトのことを「子サイト」と言います。
私は、なぜか未運営のサイトを親サイトとし、タスLifeを子サイトで運営していました。
サイトを分離するには、マルチサイトを行った手順を逆に遡って実施すればシングルサイト化されるのですが、それには問題点が一つあるのです。
それは、「親サイトだけが残り、子サイトは消滅する」ことです。
言い換えれば、タスLifeが消滅するということ。これだけは避けたい。。。
ということで、子サイトのみを分離させ、親サイトを削除する方法を調査・検討していたのです。
で、今回、子サイトのみを分離させる方法を知ったので、ローカル環境で実証し、実際に稼働している環境へ適用したという流れになります。
子サイト分離手順とローカル環境で起きた問題
子サイトを分離する手順は以下のとおり。
- ファイル類とDBのバックアップを取得する。
※DBのバックアップは、以下の2種類のバックアップを取得する。
① 全テーブル(不具合が起こった際にリストアするため)
② 子サイト分離に必要なテーブル - 1.の②のテーブル名「wp2_[子サイト番号]_」を「wp2_」に置換する。
- 稼働中のwordpressを削除する(DBもクリア)。
- 新規wordpressを作成する。
※接頭辞の設定が不正であれば修正する。 - バックアップしたwp-contentを4.の環境に上書きする。
- 画像ファイルを移動する。
- 2.のファイルを用いてDBデータをインポートする。
- Search-Replace-DB-masterでパスを置換する。
※画像ファイル格納パスを「wp-content/uploads/sites/[子サイト番号]」から「wp-content/uploads」に置換する。 - 動作確認を行う。
※Pz-LinkCardやPuSHPressが無効化されていた。 - 「robots.txt」や「ads.txt」をアップロードする。
- 「.htaccess」の編集する(私のサイトはSSLリダイレクトの設定をしているため)。
ローカル環境では大体が上手く行ったのだけれど、一点、Search-Replace-DB-masterだけが上手く行きませんでした。
「wp2_pz_linkcard」(僕の環境の接頭辞は「wp2_」なのです)テーブルで必ず「The script encountered an error while running an AJAX request.」のエラーが表示されて、置換処理が実行できませんでした(調査したけど、解決は諦めました)。
さらに、「wp cli」を使った「wp search-replace」コマンドを実行しましたが、置換すら行われませんでした。。
幸い、私のサイトはドメインが変わらないため、当該テーブルの置換は無視して検証を進めることができました。
※「wp2_pz_linkcard」のデータを見る限り、シリアライズ化されていないようなので、このテーブルのデータだけはテキストエディタで置換しても良いかもしれませんね。
テストのためにローカルで使用した環境は、Xamppを利用しました。
標準でApache、MariaDB(MySQL)、PHPが利用できるため、WordPressのテスト環境として重宝しています。
Xamppのインストール方法は、「「XAMPP」を利用したWordPressのローカル環境構築 その1」で、Xamppに新規WordPressをインストールする方法は「「XAMPP」を利用したWordPressのローカル環境構築 その2」で説明していますので、参考にしてください。
本番環境のシングルサイト化
では、手順に沿って具体的な説明を行いたいと思います。
1. ファイル類とDBのバックアップを取得
これは個々人の環境に沿った方法でバックアップを取ってもらえればと思います。
私は、BackWPupを利用したバックアップジョブを走らせています。
インストールから設定方法は、バズ部さんの「BackWPUpで確実にWordPressのバックアップを取る方法」を参考にさせて頂きました。
この設定で取得したバックアップ(ファイル類とDBバックアップ①)は、上手く行かなかった場合に以前の環境に戻すためと、このバックアップから何度でもシングルサイト化を試行できることを目的としています。
なお、取得方法は手動バックアップを実施してください。
DBバックアップ②の取得対象テーブルは、テーブル名の先頭部分が「wp2_[子サイト番号]_」となっているテーブルと、「wp2_usersmeta」「wp2_users」を取得します。
私はロリポップサーバなので、データベース管理ツールの「phpMyAdmin」で対象テーブルをエクスポートしました。
取得方法は以下のとおり。
先ずはロリポップにログインし、サイドメニューの「サーバーの管理・設定」→「データベース」をクリックします。
データベースの選択画面が表示されるので、対象のデータベース情報が表示されている部分の「操作する」ボタンをクリックします。
データベースの管理画面が表示されるので、「phpMyAdminを開く」ボタンをクリックします。
phpMyAdminのログイン画面が表示されるので、ユーザ名及びパスワードを入力し、プルダウンからデータベースのサーバを選択して、「実行」ボタンを押下します。
phpMyAdmin画面が表示されたら、左サイドメニュー空対象のデータベースをクリックし(①)、上部メニューの「エクスポート」をクリックします(②)。
エクスポート方法は「詳細」を選択することで(③)、テーブルを選択出来るようになるので(④)、先程説明したテーブルを選択状態にします(複数選択は「ctl」ボタンを押下しながらクリック)。
選択後は、画面下部の「実行」ボタンを押下します。
押下するとダウンロード画面が表示されるので、「xxxxx.sql」ファイルを任意の場所に保存してください。これでバックアップの取得は完了です。
2. テーブル名の先頭部分「wp2_[子サイト番号]_」を「wp2_」に置換する
DBバックアップ②で取得した「xxxxx.sql」ファイルをテキストエディタで開き、「wp2_[子サイト番号]_」を「wp2_」に置換します。
「wp2_」は、1つのデータベースに複数のWordPressをインストールするために、テーブルの先頭に付加する接頭辞で、wp-config.phpに定義されています。
1 2 3 4 5 6 7 |
/** * WordPress データベーステーブルの接頭辞 * * それぞれにユニーク (一意) な接頭辞を与えることで一つのデータベースに複数の WordPress を * インストールすることができます。半角英数字と下線のみを使用してください。 */ $table_prefix = 'wp2_'; |
マルチサイトの場合、接頭辞の次にサイト番号が付加されるので、シングルサイト化するためにその番号を消します。
そうしないと、シングルサイト化した際に当該テーブルが使用できなくなるからです。
よって、テキストエディタで一括置換しましょう。
3. 稼働中のwordpressを削除する
レンタルサーバの管理画面、もしくはWinSCP等のFTPクライアントソフトを使用して、WordPressを削除します。
下図のとおり、「wp-adminフォルダ」や「wp-config.phpファイル」がある改造の全てを削除すればOKです。
私はアクセス数の少ない深夜に稼働中のWordPressを削除する方法でシングルサイト化しました。
深夜の時間帯でもアクセス数が多いサイトであれば、稼働中のWordPressを削除しない別の方法で実施することを強くおススメします。
なお、データベースの全テーブルも削除します。削除もphpMyAdminにて可能です。
DBバックアップの取得時と同様、phpMyAdminにログインし、上部メニューの「構造」をクリックします。
テーブル一覧が表示されるので、下部の「すべてチェックする」をクリックし、その右のプルダウンから「削除」を選択します。
クエリ実行の確認画面が表示されるので、「はい」をクリックしてください。
4. 新規wordpressを作成する
レンタルサーバの管理画面、もしくはWordPressのサイトからダウンロードして、新規WordPressをインストールします。
レンタルサーバでの新規インストール方法は、各レンタルサーバのサイトに記載されていると思います。
なお、ロリポップでは、ロリポップ管理画面のサイドメニュー「サイト作成ツール」→「WordPress簡単インストール」でサクッと作れます。
5. バックアップした「wp-content」を新規環境に上書きする
バックアップしたファイル類に、「wp-content」フォルダがあると思います。
そのフォルダを新規インストールしたWordPressの「wp-content」フォルダに上書きしてください。
6. 画像ファイルの移動
マルチサイトとシングルサイトでは画像の保存場所が異なるため、シングルサイトでも画像を認識してくれるように、画像ファイルを指定のフォルダに移動します。
マルチサイトの場合、「wp-content\uploads\sites\[子サイト番号]」に画像類が保存されています。
私の場合は、運営年度フォルダと各プラグインフォルダがあり、それぞれのフォルダ内に画像ファイルが保存されています。
それを「wp-content\uploads」へ移動してください。
移動後は、「wp-content\uploads\sites」以下のフォルダは削除して構いません。
7. エクスポートしたSQLファイルのDBデータをインポートする
2.で置換処理を行った「xxxxx.sql」ファイルをインポートします。
インポートは「「XAMPP」を利用したWordPressのローカル環境構築 その3」の「データベースの作成」を参考に行ってください。
8. Search-Replace-DB-masterで置換処理
Search-Replace-DB-masterを使用して、データベースの値を置換します。
なぜDB値の置換は2.と同様にテキストエディタで行わないのかというと、DB値は一部のテーブルでシリアライズ化されているため、単純な置換では不正なデータが作成されてしまいます。
シリアライズ化とは何ぞやという疑問は、ググるか、以下のサイトを参照ください。
主に置換する内容は以下のとおりです。
- ドメイン名
- 画像ファイルへのパス
私の場合はドメインは変わらないので、画像ファイルのパスを置換します。
6.で画像ファイルを移動したように、「wp-content\uploads\sites\[子サイト番号]」を「wp-content\uploads」に置換します。
Search-Replace-DB-masterを利用した置換方法は、「「XAMPP」を利用したWordPressのローカル環境構築 その3」の「データベースに登録しているのドメイン名の変更」を参考にしてください。
9. 動作確認
以上でシングルサイト化は完了しました。
ここでいったんサイトの動作確認をしてみましょう。
確認の際は、ブラウザやOSなどがキャッシュしている可能性があるので、クリアしてから参照すると良いでしょう。
例として、Chromeのキャッシュのクリア方法は以下のサイトが参考になります。
私のサイトは、「Pz-LinkCard」や「PuSHPress」等の一部のプラグインが無効になっていました。
「AddQuicktag」も使用していますが、設定内容が消えてしまったので、事前に設定内容をエクスポートすることをおススメします。
また、WordPressやプラグインの更新があるかどうかも確認して、あれば更新しましょう。
10. 「robots.txt」や「ads.txt」をアップロード
「robots.txt」や「ads.txt」は、新規WordPressには含まれていないため、1.のファイル類のバックアップから取得して、レンタルサーバ上にアップロードしましょう。
「robots.txt」や「ads.txt」はなんぞや?って方は、以下の記事が参考になるかと思います。
「robots.txt」とは?
「ads.txt」とは?
11. 「.htaccess」の編集
私のサイトは、SSL化した際にhttpsへのリダイレクト設定をしているため、「.htaccess」を編集しています。
具体的には、以下のコードを追記しています。
1 2 3 4 5 |
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTPS} !=on [NC] RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule> |
新規WordPressも同様に編集しました。
以上にてシングルサイト化の全ての手順は完了です!お疲れさまでした!
まとめ
今回はマルチサイトの子サイトをシングルサイト化する方法について、その手順を説明しました。
ずっと億劫に思っていた子サイトのサイングルサイト化ですが、いざ取り組むとそこまで難しくなかったように感じます。
私と同じように分離できないかと悩み苦しんでいる方のために、当記事が役立てれば幸いに思います。
参考サイト
今回のシングルサイトに際して、全般的に参考になったサイトです。
・【WordPress】マルチサイトからシングルサイトへの移行手順について
こちらのサイトも同様に、シングルサイト化に際して大変参考になりました。
・WordPressの引っ越しに便利な wp search-replace
ローカル環境でDB値の置換ができなかったので「wp cli」を使用した置換を行う際に参考になりました。