かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

WordPress マルチサイト設置のメモ

WordPressでマルチサイトを設置した時のメモ

サイト構成
次のような構成で、WordPressの管理画面の設定からサイトが/webrootで表示されるように変更しました。

/webroot
  |- .htaccess
  |- index.php
  |- /wordpress
         |- wp-config.php

マルチサイトの設定

1. wp-config.php にマルチサイトを使用可能にするコードを追加

/wordpress/wp-config.php にマルチサイトを可能にする設定を/* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */コメントの上に追加

define ('WP_ALLOW_MULTISITE', true);

2. プラグインを全て無効にする

プラグインが有効になっているとネットワークのインストールが出来ないので、プラグインを有効にしている場合は一度全て無効にする必要があります。

3. ネットワークのインストール

WordPress管理画面をリロードすると設定 > ツールに「ネットワーク」が追加されているので「ネットワーク」を選択。

サブサイトの運用を「サブドメイン型」にするか「サブディレクトリ型」にするかを決めます。 レンタルサーバーの場合「サブドメイン型」にするとサブサイトを作る度にドメインの設定を行わなければならない場合もあるので「サブディレクトリ型」にした方がメンドーは無いかもしれません。
既に運用としているWordPressサイトをマルチサイトにする時は固定ページなどでディレクトリの割当がされているせいか「サブドメイン型」しか選択できなくなるようです。

サイトのネットワーク名・マルチサイト全ての管理者(特権管理者権限)アカウントになるサイトネットワーク管理者のメールアドレスを確認します。 ネットワークの設定を1度行うとDBが変更されてしまうので修正するにはDBを初期化してWordPressを再インストールする必要があります。
設定に問題がなければ「インストールボタン」をクリックしてマルチサイトが使用できるネットワークをインストールします。

4. サイトネットワークの設置

ネットワークのインストールが完了するとwp-config.phpとサイトのトップ(index.phpのある階層)にある.htpaccessを変更する指示が出るので、これを各ファイルにコピペしていきます。
f:id:kikiki-kiki:20180201055509p:plain

/wordpress/wp-config.php 1.で追加したコードの下に表示されたコードをコピペします

define ('WP_ALLOW_MULTISITE', true);
define('MULTISITE', true);  // マルチサイトにする: true
define('SUBDOMAIN_INSTALL', false); // サブドメイン型: true サブディレクトリ型: false
define('DOMAIN_CURRENT_SITE', 'example.com'); // サイト全体のトップドメイン
define('PATH_CURRENT_SITE', '/'); // メインサイトのパス
define('SITE_ID_CURRENT_SITE', 1); // メインサイトのID
define('BLOG_ID_CURRENT_SITE', 1); // メインブログのID (将来的に複数のブログが管理できるようになるっぽい?)

wp-config.phpの変更が完了したらパーミッション400に変更しておきます。

次に、サイトトップに当たる階層にある.htpaccessに表示されたコードをコピペします。

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) wordpress/$2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ wordpress/$2 [L]
RewriteRule . index.php [L]

この時 BEGIN WordPress で始まるWordPressが出力していた設定があるとリダイレクトループが発生してサイトが表示されなくなります。
注意書きにある通り「他のWordPress ルールを置き換えてください」とあるので、これを削除してしまうかコメントアウトします。(コメントアウトの方が万が一の時に戻しやすいかもです)

# BEGIN WordPress
# <IfModule mod_rewrite.c>
# RewriteEngine On
# RewriteBase /
# RewriteRule ^index\.php$ - [L]
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteRule . /index.php [L]
# </IfModule>
# END WordPress

5. 管理画面に再ログイン

wp-config.php.htpaccessの変更が完了したら、管理画面をリロードするとログアウトしているので、3. で決めた特権管理者権限のアカウントでログインできればマルチサイトの設定は完了です。
ログインボタンを押した時にログイン画面にリダイレクトされてしまう場合は、一度Cookieを削除するとログインがログインが出来るようになるようです。
 

wp-config.phpに追加した define('MULTISITE', true); の値をfalseにするとDBやマルチサイトのデータを残したまま、マルチサイトでないメインのサイトだけの状態に戻すことが出来るようです。
但し、テーマ内にget_blog_details()の様なマルチサイトの時しか使えない関数があるとエラーになるので注意が必要です。
FYI: https://codex.wordpress.org/Function_Reference#Multisite_functions


[参考]