はじめに
Laravel5でのメンテナンスモードの実装方法についてはこちらをご覧ください
https://qiita.com/qwe001/items/0e393040127d66879fad
何が問題か
Laravelで作ったサイトがある。このサイトに、WordPressを新たに導入した。
今回、サイトをメンテナンスモードにする必要が出てきた。
Laravelで作ったページは問題なく切り替えることが出来るが、
WordPressはそういった仕組みを入れていないため、
Laravelでメンテナンスモードに切り替えても、WordPress制作ページはメンテナンスモードにならない。
WordPressにメンテナンスモード用のプラグインを入れてもいいが、切替手順が煩雑になって手間である。
何がしたいか
- Laravelでメンテナンスモードに切り替えた時、WordPress制作ページも自動的にメンテナンスページにリダイレクトするようにしたい
- しかし、メンテナンスモード中もWordPress制作ページを編集・確認できるように、WordPress管理者ログイン中はリダイレクトしないようにする
- また、WordPress管理画面と、そのログインページもリダイレクトしないようにする(管理者ログアウトしたら再ログインできなくなるのを防ぐため)
ディレクトリ構成
{Laravelプロジェクト名}/
├ app/
├ public/
│ ├ js/
│ │ └ common.js
│ ├ css/
│ │ └ common.css
│ ├ images/
│ │ └ title.png
│ ├ {WordPressディレクトリ名}/
│ │ ├ wp-login.php
│ │ ├ wp-admin/
│ │ └ wp-content/
│ │ └ themes/
│ │ └ {テーマ名}/
│ │ ├ index.php
│ │ └ functions.php
│ └ index.php
├ resources/
│ └ views/
│ ├ index.blade.php
│ └ errors/
│ └ 503.blade.php
├ routes/
│ └ web.php
└ storage
└ framework
└ (down)
http://www.example.com/ に、Laravelで作ったトップページ(index.blade.php)が、
http://www.example.com/{WordPressディレクトリ名}/wp-login.php に、WordPressのログインページ、
http://www.example.com/{WordPressディレクトリ名}/{WordPress制作ページ名} に、WordPress制作ページがあるイメージ。
下準備
予め、メンテナンス画面のルーティング設定をしておくこと
Route::get('/maintenance', function(){ Abort(503); });
実装
function is_admin_user()
{
$current_user = wp_get_current_user();
if(user_can($current_user, 'administrator')){
return true;
}
return false;
}
function redirectToMaintenancePage()
{
$storage_path = $_SERVER['DOCUMENT_ROOT'] . '/../storage/';
$file = $storage_path . 'framework/down';
if(file_exists($file)){
$protocol = empty($_SERVER['HTTPS']) ? 'http://' : 'https://';
$page_hostname = $protocol . $_SERVER['HTTP_HOST'];
$current_url = $page_hostname . parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); // クエリパラメータを除去。WPログイン画面用
$maintenance_url = $page_hostname . DIRECTORY_SEPARATOR . 'maintenance'; // メンテナンス画面のURL
$wp_login_url = wp_login_url();
$wp_admin_url = admin_url();
if($current_url === $wp_login_url || $current_url === $wp_admin_url || is_admin_user()){
//
}
else {
wp_redirect($maintenance_url);
exit;
}
}
}
add_action( 'init', 'redirectToMaintenancePage' );
ロジック
Laravelをメンテナンスモードに切り替えると、「storage/framework/」直下に「down」という名前のファイルが生成される
このファイルがあることを、Laravelはメンテナンスモード切替の判断にしている。
WordPress配下のディレクトリも、このファイルがあればLaravelのメンテナンス画面(503.blade.php)にリダイレクトさせてるというわけ