既存の WordPress シングルサイトをサブディレクトリ型マルチサイトに移行する最も簡単な方法

WordPress Multisite

すでにシングルサイトで運用中の WordPress をマルチサイト化しようとすると、通常は「サブドメイン型」にしか移行できない。

WordPress では、すでに運用開始から1ヶ月以上経過しているシングルサイトはサブディレクトリ型マルチサイトには移行できない仕様になっている。

なんか知らんが、「運用の仕方によっては既存のパーマリンク構造に問題が生じる可能性があるから」という配慮によるものらしい。

が、絶対大丈夫だと分かっているなら この仕様は何かウザいw

既存のシングルサイトをサブディレクトリ型マルチサイトに移行する方法

というわけで、すでに運用中のシングルサイトをサブディレクトリ型マルチサイトに移行する方法を書く(こっから先の手順は質問があっても答えない。やるなら自己責任でよろしく)

とりあえず普通にマルチサイト化の手順を踏む

wp-config.php の「/* 編集が必要なのはここまでです !」の上あたりに、

define('WP_ALLOW_MULTISITE', true);

を書いて、WordPress にログイン。

「ツール -> ネットワークの設置」に移動する。

シングルで運用中の場合のネットワークの設定画面

新規インストールなら、「サブドメイン」か「サブディレクトリ」かの選択肢が出るのだが、すでに運用開始から1ヶ月以上経過してると ↑ こうなる。

WordPress 本体のソースにちょっくらメスを入れる

WordPress 本体で新規インストールかどうかの判定をしている箇所は、

/wp-admin/includes/network.php 内にある allow_subdirectory_install() という関数である。

なので、この関数に以下の2行目の部分を追加する。

function allow_subdirectory_install() {
	return true;	// ← コレ追加

	global $wpdb;
        /**
         * Filters whether to enable the subdirectory install feature in Multisite.
         *
         * @since 3.0.0
         *
         * @param bool $allow Whether to enable the subdirectory install feature in Multisite. Default is false.
         */
	if ( apply_filters( 'allow_subdirectory_install', false ) )
		return true;

	if ( defined( 'ALLOW_SUBDIRECTORY_INSTALL' ) && ALLOW_SUBDIRECTORY_INSTALL )
		return true;

	$post = $wpdb->get_row( "SELECT ID FROM $wpdb->posts WHERE post_date < DATE_SUB(NOW(), INTERVAL 1 MONTH) AND post_status = 'publish'" );
	if ( empty( $post ) )
		return true;

	return false;
}

この状態で、さきほどの「ツール -> ネットワークの設置」にアクセスすると、

サイトネットワーク内のサイトアドレス選択画面

↑ 「サブディレクト」が選択できるようになる。

あとは手順どおり

ここまでくれば、あとは画面の指示通りに進めれば OK。
wp-config.php と .htaccess に画面に書かれている通りの内容を記述して、ログアウト -> ログインする。

マルチサイト化の最終手順画面

↓ できあがり。

サブディレクトリ型のマルチサイト完成画面

できあがってしまえば、/wp-admin/includes/network.php の中身は元に戻して OK。

WordPress

Posted by るな