WordPress マルチサイトの子サイトをシングルサイトに移行する方法

スポンサーリンク

WordPressマルチサイトの子サイトを普通のシングルサイトに移行する

  1. 親サイトだけをシングルサイト化
  2. 子サイトだけを分離してシングルサイト化

難易度的に、1番目は基本的に子サイトをダッシュボードから削除すれば終わりです。
2番目がとても難しいと思います。ダッシュボードで他の子サイトは削除できても、親サイトは削除できないからです。
すなわち子は親に依存しているのです。その親からなんとか独立する方法をまとめました。

ご注意
以下の記事は仮想ローカル環境で試しただけで、本番環境では検証していません。
よって本番環境に適用した場合不具合になる可能性もあります。
あくまでも自己責任でお願いいたします。

phpMyAdminの導入

前回の記事をもとにやっていきたいと思います。
その前にデータベースを弄りますので、phpMyAdminをUbuntu16.04に導入します。

$ wget https://files.phpmyadmin.net/phpMyAdmin/4.7.8/phpMyAdmin-4.7.8-all-languages.zip
$ unzip phpMyAdmin-4.7.8-all-languages.zip
$ mv phpMyAdmin-4.7.8-all-languages phpmyadmin
$ sudo mv phpmyadmin/ /usr/share/

Nginxの設定

$ sudo nano /etc/nginx/sites-enabled/default
	
            .......................
 location ~ \.php$ {
		include snippets/fastcgi-php.conf;
	#
	#	# With php7.0-cgi alone:
	#	fastcgi_pass 127.0.0.1:9000;
	#	# With php7.0-fpm:
		fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        #       fastcgi_index  index.php;
	 }

	# deny access to .htaccess files, if Apache's document root
	# concurs with nginx's one
	#

location /phpmyadmin {
        root /usr/share;
        index index.php;
 
        location ~ ^/phpmyadmin.+\.php$ {
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
 
    }	
}

$ sudo systemctl restart nginx

あとSearch-Replace-DB-masterも引き続き使用します。

データベースで不要なサイトテーブルを削除

WordPress用のデータベースを選択して、
親サイトのデータベーステーブルをwp_usermeta, wp_usersだけ残して他を全て消します。
phpMyAdminで消すテーブルの左にチェックを入れていくと、下部にあるプルダウンメニューからチェックしたものを一括で削除できます。
残す子サイトのテーブルは全部残して、消す子サイトのテーブルを全部消します。
ここで親サイトのテーブルにはプレフィックスwp_がデフォルトで付与されています。
子サイトのプレフィックスは同様にwp_2_, wp_3_, …となります。

子サイトのテーブルプレフィックスの変更

残す子サイトのテーブルプレフィックスを親サイトと同じにする。
即ち、wp_2_…をwp_…というように全て書き換え、親サイトのテーブルプレフィックスと揃えます。消す子サイト、ここでプレフィックスがwp_3_ 残す子サイトの同をwp_2_と仮定します。
テーブルプレフィックスの変更はphpMyAdminから行います。

WordPress用のデータベースを選択 → テーブルを選択 → 上部のメニューから操作を選択

すると右端上部からプレフィックを変更できます。

この変更をプレフィックwp_2_が付いているテーブルの数だけ行います。

データベースの中身の変更

この後、Search-Replace-DB-masterを使ってデータベースの中身も同様にwp_2をwpにリプレイスします。replaceにwp_2, withにwpを指定します。
安全のためにwp_3もwpにリプレイスしておきます。

因みに私は最初からプレフィックを変えていて、wp_ではありません。
セキュリティー上デフォルトのプレフィックwp_はよくないみたいです。

Search-Replace-DB-masterではテーブルのプレフィックスは変えられないと思います。

画像のuploadsディレクトリーを変更する。

マルチサイト環境では
… /wordpress/wp-content/uploads/sites/2/
の中に子サイト2の画像が保存されています。
同様に子サイト3は
… /wordpress/wp-content/uploads/sites/3/
保存されています。uploadsディレクトリー直下に子サイト2の画像をコピーします。
親サイトの画像は上書きされます。最後にsitesディレクトリーを削除します。

$ cd /var/www/html/wordpress/wp-content/uploads/sites/2
$ sudo cp -r * /var/www/html/wordpress/wp-content/uploads/
$ cd /var/www/html/wordpress/wp-content/uploads
$ sudo rm -r sites

データベースで画像ファイルのURLの変更

データベースの中のsites/2/という文字列を削除します。
Search-Replace-DB-masterを使います。
replaceにsites/2/, withは空欄でOKです。
念のためにsites/3/も消しておいた方がいいかもしれません。私はそうしました。

wp-config.phpの調整

wp-config.phpでマルチサイト関係の記述をコメントアウトします。

/*define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', true);
define('DOMAIN_CURRENT_SITE', 'xubuntu16-v.com');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
define('SUNRISE', 'on');*/

動作確認

サイトにアクセスしてみてください。
私の場合
xubuntu16-v.com 親サイト
xubuntu16-v.net 子サイト2
xubuntu16-v.jp 子サイト3
という対応でした。これはNginxの設定で

server_name xubuntu16-v.com *.xubuntu16-v.com xubuntu16.net xubuntu16-v.jp;

の順に対応します。

子サイトを独立させたxubuntu16-v.netでは全く問題がありません。
それとプラグインが全て無効化されていたので有効化しました。
他のサイトアドレスではトップページは表示されますが、その他のページは当然
xubuntu16-v.net/…にリダイレクトされます。 そもそもページはありませんから・・・

参考サイト

 
WordPress マルチサイトの子サイトをシングルサイトへ変更する
phpMyadmin からデータベースのテーブル名を変更する方法
Ubuntu 16.04 に nginx mysql php phpmyadmin環境を整える

以上です。最後までお読み頂きありがとうございます。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク