
WordPressマルチサイトについては、Naibaは何度も聞いたことがあります。最近研究NaibaのテーマDEMOこのサイトではマルチサイト機能を使用したため、WordPress でマルチサイトを構築する具体的な手順と方法を記録して共有します。
この記事で触れていない点については、以下を参照してください。公式ドキュメント。
WordPressマルチサイト紹介
通常、WordPress サイトを構築する際の標準的な手順は次のとおりです。仮想ホストの追加、ドメインのバインド、インストールパッケージのアップロード、データベースの作成、WordPress のインストール。
一方、WordPress マルチサイト(サブディレクトリモード)では、マルチサイトモードを有効にして新しいサイトを追加するだけで済みます。
サブドメインモードのマルチサイトの場合は、さらにドメインバインドが必要になります。また、通常のインストール方法よりも迅速で、一度に複数のサイトを作成したい人に適しています。
これらのマルチサイトはメインサイトのデータベース、テーマファイル、プラグインファイルを共有するため、メインサイトにあるリソースはサブサイトでもそのまま使用でき、テーマやプラグインを重複してインストールする手間が省けます。
同時に、マルチサイトのユーザーデータも相互に連携しており、アップグレードする場合はメインサイトのみアップグレードすれば、他のサブサイトも自動的にアップグレードされます。
WordPressマルチサイト有効化チュートリアル
この記事はWordPress 5.2に基づいて作成されています。
まず、マルチサイトを有効にするWordPressサイトの設定ファイルwp-config.phpに、このコード行を追加します。
define('WP_ALLOW_MULTISITE', true);
コードを /* That’s all, stop editing! Happy blogging. */ という行の直上の行に追加します。
その後、サイト管理画面をリフレッシュすると、「ネットワークを設定」オプションが表示されます。下図の通りです。

サブドメインとサブディレクトリから選択できます。必要に応じて選択してください。
サブドメインとは、1つのサイトが1つのドメインに対応することを意味します。Naibaはサブドメイン形式をテストしていません。また、他のドメインをバインドしたい場合は、このチュートリアルを参照。
サブディレクトリとは、現在のドメインの後ろにフォルダ形式で追加する方法です。例えば、Naiba のテーマデモでは、1つのサブディレクトリで1つのテーマをデモ表示します。
インストール後、以下のコードをコピーして設定ファイル wp-config.php に追加してください。先ほど追加したコードの次の行に追加します。

WordPress管理画面を再度更新すると、サイトオプションが表示されます。
WordPressマルチサイトのNginxの擬似静的(リライト)ルールはここにはありません。Apacheのものしかありません。Nginxの擬似静的ルールについては、後ほどNaibaが共有します。

新しいサイトを追加し、対応する情報を入力して追加するだけです。プラグインを有効にしている場合は、すべてのプラグインを手動で無効にする必要があります。

WordPressマルチサイトNginx疑似静的ルール
追加が完了したら、先ほど追加したサブサイトにアクセスすると、ページのレイアウトが崩れていることがわかります。これは、擬似静的ルールがまだ追加されていないためです。擬似静的ルールを追加すれば解決します。

現在Naibaが使用しているWordPressマルチサイトのNginx擬似静的ルールは以下の通りです
# wordpress固定链接设置
try_files $uri $uri/ /index.php?$args;
# 管理面板添加斜杠
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
# 传递上传文件给 wp-includes/ms-files.php
rewrite /files/$ /index.php last;
# 重写多站点 '.../wp-.*' and '.../*.php'.
if (!-e $request_filename) {
rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last;
rewrite ^/[_0-9a-zA-Z-]+.*(/wp-admin/.*\.php)$ $1 last;
rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 last;
}別のルール
#ignored: “-” thing used or unknown variable in regex/rew
rewrite ^/([_0-9a-zA-Z-]+/)?wp-admin$ /$1wp-admin/ permanent;
if (-f $request_filename){
set $rule_2 1;
}
if (-d $request_filename){
set $rule_2 1;
}
if ($rule_2 = "1"){
#ignored: “-” thing used or unknown variable in regex/rew
}
rewrite ^/([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) /$2 last;
rewrite ^/([_0-9a-zA-Z-]+/)?(.*.php)$ /$2 last;
rewrite /. /index.php last;