マルチサイトの子サイトを分離して独立させてみた【WordPress】

複数ブログをWordPressのサイトネットワーク機能を使って運営していましたが、訳あってシングルサイトに戻すことになりました。

マルチサイト解除にあたって子サイトも存続させたかったので、一つのWordPressとして独立させた時の備忘録です。

引っ越し先を用意する

とりあえず分離するために、移動先を用意します。

今のブログはKUSANAGIで環境構築しているので、サブドメインを使って同じサーバーに追加でプロビジョニングしました。

【KUSANAGI】1サーバーにサブドメインで複数サイトを追加する

Xserverだとサーバーパネルの[ドメイン] -> [サブドメイン設定]からサブドメインを追加できるので、そこにWordPressをインストールするか、既存のドメインのサブディレクトリにぶら下げればいいでしょう。

インストールできたらそのままで大丈夫です。

本当ならこの記事で紹介している方法でサクッと引っ越ししたかったのですけど、マルチサイトには対応していない(してるけど$199必要)だったので、手動で移植します。

WordPressのサーバー引越しが楽々できるプラグイン紹介と使い方

気を付けるポイントさえ押さえておけば、そこまで難しい作業ではありません。

必要なファイルを移動

まずはファイル群を移植して、WordPressを同じような環境にしてあげます。

テーマやプラグイン、アップロードした画像など、必要なファイル群を新しい環境にアップロードしていきましょう。

テーマとプラグインはそのままwp-content以下のthemespluginsをコピーすればよいのですが、画像などは環境によって保存場所が異なります。

wp-content/uploads/sites/【子サイト番号】/

僕の環境では上記のディレクトリに保存されていましたので、それを分離先サイトのwp-content/uploads/以下にコピーしました。

ファイルの移植が済んだら、データベースを流し込んでいきます。

データベースを移植

サイトネットワークを使っていると、子サイトのテーブルは親サイトのデータベースにねじ込まれています。

ちょっとこれが厄介なので、慎重に作業しましょう。

必要なテーブルだけエクスポート

独立させたい子サイトの分だけ、テーブルをエクスポートします。

親サイトのテーブルの接頭辞(プレフィックス)が【wp_】だとしたら、例えばサイト番号2の子サイトの接頭辞は【wp_2_】になっています。

子サイトを分離する時は、この接頭辞のついたテーブルをエクスポートすればいいわけです。

下で説明するように、ちょっとだけ例外があるのですが。。

ユーザー絡みと設定だけは単独

それぞれの子サイト分のテーブルがごちゃごちゃ作られるくせに、ユーザー絡みのとオプションのテーブルだけは全てのサイトで共用になっていました。

これもあわせて移植しておかないと、管理者不在のサイトが出来あがってしまいます。

忘れずにuserusermetaoptionsテーブルもエクスポートしましょう。

置換

アップロードしたメディアファイルは、ディレクトリ構造が変わってしまいました。

メディアライブラリとアップロードファイルの整合性がとれてなかったりの問題があって、そのままではアイキャッチとか記事中の画像が全滅してしまいますので、パスを書き換えてあげる必要があります。

なので、エクスポートしたsqlファイルを開いてURL関係を一気に置換しましょう。

サクラエディタなどの置換機能でガーッとやっつけます。

僕の例だと

wp-content/uploads/sites/【子サイト番号】/

から

wp-content/uploads/

に置換。

保存の際は、文字コードとかが変わってしまわないように気をつけましょう。

流し込み

引越し先のデータベースに、さっき書き換えたsqlファイルをインポートします。

Xserverなら自動的にphpMyAdminが入っていると思いますので、そのままインポートできますね。

僕はConoHaでKUSANAGIを使っているので、そのままではデータベースを簡単に弄れる環境がありません。

なのでphpMyAdminを手動でインストールしました。

KUSANAGIでnginxな環境にphpMyAdminを導入した手順

接頭辞の整形

インポートが終わって、データベースは完了……というわけにはいかんざき。

プレフィックスがおかしなことになっているので、直します。

wp_【子サイト番号】_【テーブル名】

wp_【テーブル名】

値にも注意

忘れがちなのが、optionsテーブルのoption_nameフィールド。

ここには子サイト番号の振られた値が記録されているので、忘れず書き換えましょう。

ここを直しておかないと、リダイレクトされて管理画面にアクセスできなくなります。

SQLクエリでこんな風に投げれば特定できますよ。

SELECT * FROM `wp_options` WHERE `option_name` LIKE '%_user_roles'

サイトURLの変更

引越し先のWordPressに認識させるサイトURLをデータベースから直接書き換えます。

ヘタに管理画面にログインしてぶっ壊れるのも嫌ですからね……。

SQL文で検索するには下の2行。

SELECT * FROM `wp_options` WHERE `option_name` = 'siteurl'
SELECT * FROM `wp_options` WHERE `option_name` = 'home'

普通はIDの1番目と2番目にいるので、探すまでもないと思いますけど……。

ログインしてチェック

ここまでできたら引越し先のWordPressのアドレスにアクセスして、きちんと動くか確認してみます。

管理画面、表示側などを一通り確認してみて、問題なければ子サイトの分離は成功です。

あとは分離元の子サイトへのアクセスを新サイトに流すためにリダイレクト設定したり、いらなくなった子サイトを削除したりの作業を行いましょう。

分離元サイトからリダイレクト

旧サイトへのアクセスを、新サイトに301リダイレクトしておきます。

僕の場合はサブディレクトリからサブドメインへの移動なので、nginxのconfファイルにこんな記述を加えました。

location ~ ^/【移転元のサブディレクトリ】/ {
  return 301 https://【移転先のサブドメイン】.$host$request_uri;
}

これで、古いURLにアクセスしてくれたユーザーさんを、新しいURLに誘導できますね。

その他Analyticsやサチコ、場合によってはAdSenseなどの設定も見直しましょう。

さいごに

マルチサイトの設置はそこまで苦戦しませんでしたが、作成した子サイトを独立させようとすると大変でした。

サーバー環境とかにもかなり左右されると思いますので、難しいと感じたら無理せず業者に委託するなどした方がいいかもしれません。

大事なサイトは単独のWordPressで作っておくと間違いないです。