WordPressをマルチサイト化する方法

WordPressをマルチサイト化し、1つのドメインで複数のWordPressサイトを構築していく。

WordPressのマルチサイト化の手順

wp-config.phpを編集する

FTPでサーバにアクセスし、wp-contentフォルダと同階層にあるwp-config.phpをローカルにダウンロードする。

  • public.html
    • wp-admin
    • wp-content
    • wp-includes
    • wp-config.php // こちらをダウンロードする
    • etc…

このとき、万が一に備えてwp-config.phpはバックアップを作成しておく。

編集前のwp-config.phpをエディターで表示すると、およそ87行目のあたりに以下のように記述がある。


/* カスタム値は、この行と「編集が必要なのはここまでです」の行の間に追加してください。 */



/* 編集が必要なのはここまでです ! WordPress でのパブリッシングをお楽しみください。 */

/* カスタム値は、この行と「編集が必要なのはここまでです」の行の間に追加してください。 */

と書かれた行から、

/* 編集が必要なのはここまでです ! WordPress でのパブリッシングをお楽しみください。 */

と書かれた行の間に、

define('WP_ALLOW_MULTISITE', true);

と追記し保存する。


/* カスタム値は、この行と「編集が必要なのはここまでです」の行の間に追加してください。 */
define('WP_ALLOW_MULTISITE', true);


/* 編集が必要なのはここまでです ! WordPress でのパブリッシングをお楽しみください。 */

編集したwp-config.phpはFTPを使用してアップロードし、サーバに上書きする。

以上で、WordPressのマルチサイト機能が有効になる。

ダッシュボードにログインして「サイトネットワークの設置」をクリックする

WordPressのダッシュボードにログインすると、ツールの配下にサイトネットワークの設置という子メニューが追加されているので、クリックする。

プラグインを無効化する

サイトネットワークの設置を表示した時に、有効化されたプラグインがあると、プラグインを無効化するように促され、サイトネットワークの設置が行えない。

サイトネットワークの設定を行っている間は、すべてのプラグインを無効化する。

WordPressサイトネットワークの作成

プラグインを無効化したら、再度、サイトネットワークの設置を表示する。

ここで入力する項目は以下のとおり。

ネットワークのサイトのアドレスサブドメインかサブディレクトリを選択する。あとで変更することはできないので、慎重に検討する。
ネットワーク詳細下記のように自動的に入力されるが、変更もできる。
└サーバーアドレスWordPress のインストールにアクセスする際に使用するURL のドメイン。
└ネットワークタイトルネットワーク全体のタイトル。
└管理者メールアドレスネットワーク全体の特権管理者のメールアドレス。

ここでは、サブディレクトリを選択した。入力が完了したら、インストールをクリックする。

wp-config.phpと.htaccessを編集する

インストールが完了すると、サイトネットワークを有効化中という画面になる。

まず、wp-config.phpを編集する。サイトネットワークを有効化中1.に表示されたコードを、wp-config.phpに追記する。


/* カスタム値は、この行と「編集が必要なのはここまでです」の行の間に追加してください。 */
define('WP_ALLOW_MULTISITE', true);

define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'XXXXXXXXXX.com');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);


/* 編集が必要なのはここまでです ! WordPress でのパブリッシングをお楽しみください。 */

続いて、.htaccessを編集するために、FTPでサーバにアクセスして、ルート直下にある.htaccessをダウンロードする。

  • public.html
    • wp-admin
    • wp-content
    • wp-includes
    • wp-config.php
    • .htaccess //こちらをダウンロードする
    • etc…

このとき、念のため.htaccessのコピーを作成しておく。

.htaccessをエディターで開き、サイトネットワークを有効化中2.のコードを追記するが、


RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
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).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

.htaccessにすでに以下のようなコードが記述されていることが多いので、



# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

# BEGIN WordPress

から始まる一連のコメントアウトと、

# END WordPress

というコメントアウトの間にあるコードを削除して、サイトネットワークを有効化中2.のコードを貼り付ける。



# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
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).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
</IfModule>

# END WordPress

編集が完了したらFTPでサーバに上書きアップロードする。

マルチサイト化完了

WordPressのダッシュボードを読み込み直すと、マルチサイト化前にはサイト名が表示されていた左上のテキストが、参加サイトという表示に変更になっていることが確認できる。

サイトを追加する

参加サイトをクリックすると、サイトネットワーク管理が現れ、サイトを選択すると、サイトを追加することができる。

新しいサイトを追加するためには、サイトアドレス、サイトのタイトル、サイトの言語、管理者メールアドレスを入力して、サイトを追加をクリックする。

WordPressのマルチサイト化の注意書き

  • WordPress アドレス (URL)が 80または443以外のポート番号を使用していると、ネットワークを作成できない→バージョンアップによりこちらの制限はなくなった
  • WordPress はドキュメントルートにインストールされていない場合、サブドメイン型のマルチサイトは構築できない
  • WordPress をインストール後、1ヶ月以上経過している場合、サブドメイン型しか選択できない
    • ただし裏技的な抜け道もある https://thk.kanzae.net/net/wordpress/t6762/
    • また、マルチサイト化した後に、wp-config.phpdefine( 'SUBDOMAIN_INSTALL', true );とすることでサブドメイン型へ変更できる
  • ネットワーク内の各サイトは、サーバー上に自身のディレクトリを持たないことから「仮想的な」サイトですが、共有されたインストール内にメディアアップロード用の個別ディレクトリと、データベース内に個別のテーブルを持つ
  • ネットワークに追加されたユーザーは、ネットワーク内のすべてのサイトの購読者権限を持つ
  • 最上位権限は、ネットワーク管理者 (特権管理者)となり、サイト管理者よりも広い権限を有する
  • アップロードディレクトリ
    • 最初に作成したサイト:/wp-content/uploads/
    • それ以降のサイト:/wp-content/uploads/sites/フォルダー下の、データベース上のサイト ID と同じフォルダ内に保存される
  • WordPress アドレス (URL)が 80または443以外のポート番号を使用していると、ネットワークを作成できない→バージョンアップによりこちらの制限はなくなった
  • WordPress はドキュメントルートにインストールされていない場合、サブドメイン型のマルチサイトは構築できない
  • WordPress をインストール後、1ヶ月以上経過している場合、サブドメイン型しか選択できない
  • バー上に自身のディレクトリを持たないことから「仮想的な」サイトですが、共有されたインストール内にメディアアップロード用の個別ディレクトリと、データベース内に個別のテーブルを持つ
    • ただし裏技的な抜け道もある https://thk.kanzae.net/net/wordpress/t6762/
    • また、マルチサイト化した後に、wp-config.phpdefine( 'SUBDOMAIN_INSTALL', true );とすることでサブドメイン型へ変更できる
  • ネットワークに追加されたユーザーは、ネットワーク内のすべてのサイトの購読者権限を持つ
  • 最上位権限は、ネットワーク管理者 (特権管理者)となり、サイト管理者よりも広い権限を有する
  • アップロードディレクトリ
    • 最初に作成したサイト:/wp-content/uploads/
    • それ以降のサイト:/wp-content/uploads/sites/フォルダー下の、データベース上のサイト ID と同じフォルダ内に保存される

参考

  • マルチサイトネットワーク作成の前に
    https://ja.wordpress.org/support/article/before-you-create-a-network/
  • ネットワークの作成
    https://ja.wordpress.org/support/article/create-a-network/
  • マルチサイトのネットワーク管理
    https://ja.wordpress.org/support/article/multisite-network-administration/
  • 複数のブログをマルチサイトに移行する
    https://ja.wordpress.org/support/article/migrating-multiple-blogs-into-wordpress-multisite/