WordPressマルチサイトでも、開発環境と本番環境にて、完全に同じファイルを使う方法

開発環境と本番環境で、rsyncしても問題ない環境を作る方法を、『WordPress開発環境と本番環境にて、完全に同じファイルを使う方法』にて、公開していた。

しかしこの方法は、マルチサイトには対応していない。
せっかく設定した『WP_HOME』『WP_SITEURL』だが、マルチサイトには非対応のため、無視してURLが書き変わらないのだ。

WordPressも1個や2個なら管理するけど、同じファイルがたくさんなど非効率だし、アップデートも面倒。
プラグインやテーマの管理もツライ。
そう考えると、マルチサイト機能って便利ですね!

なので、マルチサイトではどうするのかを、その方法を説明する。
ちょっと手間かかる。

マルチサイト機能について

カンタンに言うと、1つのWordPressで複数サイトがあるように見せる機能。
細かく分けると、下記の3種類がある。

どれを使うかは、個人のお好みである。

マルチサイト化する

設定方法について、WordPressマルチサイト使用方法情報は多々あるので、下記は簡潔に記載しておく。

  • 『wp-config.php』に下記を追記する。
    define('WP_ALLOW_MULTISITE',true);
  • 管理画面にログインすると増えている『ツール』→『サイトネットワークの設置』をクリック
  • 『WordPress サイトネットワークの作成』で適当に設定し『インストール』をクリック
  • 『.htaccess』にマルチサイト設定を書き加える
    /// マルチサイト使用時必須。
    define('MULTISITE', true);
    
    /// サブディレクトリ『false』、サブドメイン『true』、マルチドメイン『true』という設定。
    define('SUBDOMAIN_INSTALL', false);
    
    /// メインサイトのURL。
    // サブドメインの場合『XXX.example.jp』、サブディレクトリの場合『example.jp/XXX』として追加されるようになる。
    define('DOMAIN_CURRENT_SITE', 'example.jp');
    
    /// WordPressファイルののあるディレクトリの絶対パス 
    define('PATH_CURRENT_SITE', '/user/local/');
    
    // ここは両方『1』以外、基本的に変えることはない
    define('SITE_ID_CURRENT_SITE', 1);
    define('BLOG_ID_CURRENT_SITE', 1);
    
  • もしパーマリンク設定していなければ、『wp-config.php』に、下記のような設定も必要。
    RewriteEngine On
    RewriteBase /user/local/
    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]
    

再度、管理画面にログインし直すと、左上に『参加サイト』メニューが増えていることを確認出来れば、マルチサイト化は完了!
あとは『参加サイト』→『サイトネットワーク管理』→『サイト』から、サブドメインとサブディレクトリサイトを追加出来る。

『マルチドメイン方式(サブドメインのみ登録含む)』を使う場合、基本は『サブドメイン方式』と同じだが、更に追加で設定が必要。

マルチドメイン方式(サブドメインのみ登録含む)場合の追加設定

『example.jp』と『sample.jp』と言った違う複数ドメインで、使いたいと言った場合の追加設定。

サブドメインしか登録しない場合も、同様の設定が必要。
例えばドメイン『example.jp』自体は使えず、『aaa.example.jp』『bbb.example.jp』しか使えないといった場合。
そういう場合も『マルチドメイン』という扱いになる様子。

基本的にはサブドメイン形式と同じなので、マルチサイト化設定自体は同じ。

サイト追加時に気づいたと思うが、サブドメイン形式でしか新規追加は出来ない。
追加した後に、追加したサイトを『編集』すると『サイトアドレス (URL)』を、ドメインごと書き換えることが出来る。

サイトの追加は出来る。
しかしこのままでは、Cookie設定がおかしくなって、管理画面にログイン出来なくなってしまう。

なので『WordPress MU Domain Mapping』というプラグインを使う。
インストールし、適用後、『設定』→『Domain Mapping: Domains』で、設定した使いたいドメインを追加する。

『wp-config.php』に下記を追加。

define('SUNRISE', 'on');

プラグイン本体のディレクトリの『sunrise.php』を、『wp-content』ディレクトリ直下に配置する。

これだけで、管理画面も安心して使える。

WordPress MU Domain Mappingの注意点

サイト情報(wp-site/wp-blog)にて『path』が『/』以外だと使えない。
もし使うと『The domain mapping plugin only works if the site is installed in /. This is a limitation of how virtual servers work and is very difficult to work around.』
というメッセージが出て止まる。

追加したサイトの管理画面で、プラグイン等が出ない!

『特権管理者』だから、本来は表示されるべき項目が、管理画面に出てこない場合がある。

そんなときは『参加サイト』→『サイトネットワーク管理』→『設定』画面に入る。
『新規登録の許可』にて『新規サイトおよびユーザーアカウントの登録をどちらも許可する。』を選択し、更新。

「何でそうなる?」と思うけど、コレで直る。

開発環境と本番環境にて、完全に同じファイルを使うための設定

拙僧が作った『Use WP_HOME and WP_SITEURL in MultiSite』プラグインをインストール。
プラグイン本体のディレクトリの『sunrise.php』を、『wp-content』ディレクトリ直下に配置する。

安心してください。
『WordPress MU Domain Mapping』に対応済みですよ!

『wp-config.php』の先程設定したマルチサイト設定を、こんな感じで書き換える。

if (strstr($_private_config['DB_FILE'], 'local.docker')) {
   define('LOCAL_FLAG', ture);

   /// 開発環境のURL
   define('DOMAIN_CURRENT_SITE', 'local.docker');

   /// 開発環境のWordPressファイルののあるディレクトリの絶対パス 
   define('PATH_CURRENT_SITE', '/docker/www/');
}else{
   define('DOMAIN_CURRENT_SITE', 'example.jp');
   define('PATH_CURRENT_SITE', '/user/local/');
}
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);

要はローカルと本番で変わるとこが変わっていればいいので、うまいこと書いてください。

もしサブドメインの場合は『参加サイト』で切り替えが可能になっている。
サブドメインまたはマルチサイトの場合において、メインサイト以外のサイトを確認したい場合は『wp-config.php』に、下記を追記する。

define('BLOG_ID_TARGET_SITE', 確認したいブログID);

出来なかったり、説明不足等あれば、ご連絡下さい!

コメント

タイトルとURLをコピーしました