マルチサイト内でサイトを複製する
カテゴリー: WordPress
この記事は2019年6月17日に書かれたものです。情報が古い可能性がありますのでご注意ください。
マルチサイト環境で新たなサイトを作成する場合、サイトや各種プラグインの設定、カスタムフィールド など、サイト毎に一から設定しなければなりません。
そのため、例えばマルチサイトで多言語サイトを構築していて、同じ構成で新たな言語を追加したい場合など、既に存在しているサイトと同等のサイトを新たに作ろうとするとき、上記に加えて沢山の固定ページや問い合わせフォームも作成しようとすると、かなり工数がかかります。固定ページなどは既存サイトからエクスポートしてそれを新しいサイトにインポートすることもできますが、WordPress の機能ではカスタムフィールドの内容はエクスポートされません。
そこで、既存のサイトを複製して新たなサイトを作り、それを元に必要な箇所を修正することができればと情報を探してみましたが、求めるものが見つからなかったので、既存サイトのデータベースを流用して実行してみました。
1. バックアップ
データベースを直接扱うので何はさておき、いつでも元に戻せるようにデータベースのバックアップを取っておきます。
特に以下で示すエクスポート対象のテーブルや編集すべき箇所は、WordPress の設定やインストールしているプラグイン、複製したい条件等によって異なると思いますので、あくまで参考とし、必ず事前にバックアップを取ってから作業してください。
2. 新しいサイトを作成
とりあえず普通に新しいサイトを作成します。設定等はすべて既存サイトのデータベースを流用するので、URL等、新しいサイトを作成するのに最低限必要な項目のみ設定します。
この時点で、たとえば既にメインサイトと2つのサブサイトの計3つのサイトがあって、4つ目の新しいサイトを作成したとしたら、データベースの接頭辞は既存の3サイトは wp_、wp_2_、wp_3_ となっていて、新しく作成したサイトは wp_4_ となります。
3. 既存サイトのデータベースをエクスポート
次に、コピー元のサイトのデータベースをエクスポートします。上記の例でサブサイトをコピーする場合は、その接頭辞(wp_2_ または wp_3_)から始まるテーブルを全てエクスポートすればよいですが、メインサイトをコピーする場合は注意が必要です。この接頭辞(wp_)から始まるテーブルには、blogs、blog_versions、site、sitemeta、users、usermeta など、マルチサイト全体に関わるテーブルが含まれていますので、他のサブサイトのテーブルと見比べて必要なテーブルのみをエクスポートする必要があります。
4. エクスポートしたデータベースを編集
エクスポートしたデータベースをテキストエディタで開いて編集します。
- 接頭辞:コピー元の接頭辞からコピー先の接頭辞へ置換
- サイトURL:http(https)から始まる URL
これを編集しておかないと新しいサイトにアクセスできなくなると思います。 - サイトタイトルなど、必要に応じて
5. 編集したデータベースをインポート
最後に編集したデータベースをインポートしますが、インポートする前に、新しいサイトを作成した際に追加されたテーブル(先の例で wp_4_ から始まるテーブル)を削除しておきます。インポートが完了すると、新たに wp_4_ から始まるテーブルが追加されます。
6. 新しいサイトとして編集
これで管理画面にアクセスすると、追加したサイトが URL 等データベースを編集した内容以外、既存のサイトをコピーしたものになっています。
これを元に新しいサイトとして編集すれば、特に多くのカスタマイズを施したサイトなどは、一から作るよりかなり工数が短縮されると思います。
7. その他
メディアファイルもコピーする場合は、FTP で wp-content/uploads にアクセスするとメインサイトのメディアファイルが保存された年月フォルダがあり、サブサイトのメディアファイルは sites フォルダ以下の 2、3、4 などのサイトIDに対応したフォルダに保存されていますので、年月のフォルダごとコピーします。但し、記事の中に挿入したメディアファイルのパスは、コピー元のフォルダのままですので、必要に応じて編集する必要があります。
なお、投稿や固定ページの公開日時がコピー元サイトのものとなっていますので、これを新しい日付にしたい場合は「Post Date Time Change」というプラグインが便利です。
また、投稿のリビジョンもコピーされていますので、不要あるいは精神的に邪魔(笑)な場合は削除します。リビジョンの削除方法は検索すると、データベースから SQL 文で直接削除する方法と、「WP-Optimize」などのプラグインを使う方法がたくさん紹介されています。