フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援
フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援

Laravelのメンテナンスモード切替をWordPressにも適用する方法

はじめに

Laravel5でのメンテナンスモードの実装方法についてはこちらをご覧ください
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)

www.example.com/ に、Laravelで作ったトップページ(index.blade.php)が、
www.example.com/{WordPressディレクトリ名}/wp-login.php に、WordPressのログインページ、
www.example.com/{WordPressディレクトリ名}/{WordPress制作ページ名} に、WordPress制作ページがあるイメージ。

下準備

予め、メンテナンス画面のルーティング設定をしておくこと

{Laravelプロジェクト名}/routes/web.php
Route::get('/maintenance', function(){ Abort(503); });

実装

{Laravelプロジェクト名}/public/{WordPressディレクトリ名}/wp-content/themes/{テーマ名}/functions.php
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'];

        $currentUrl = $page_hostname . parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); // クエリパラメータを除去。WPログイン画面用

        $maintenanceUrl = $page_hostname . DIRECTORY_SEPARATOR . 'maintenance'; // メンテナンス画面のURL
        $wpLoginUrl = wp_login_url();
        $wpAdminUrl = admin_url();

        if($currentUrl === $wpLoginUrl || $currentUrl === $wpAdminUrl || is_admin_user()){
            //
        }
        else {
            wp_redirect($maintenance_url);
            exit;
        }
    }
}
add_action( 'init', 'redirectToMaintenancePage' );

ロジック

Laravelをメンテナンスモードに切り替えると、「storage/framework/」直下に「down」という名前のファイルが生成される
このファイルがあることを、Laravelはメンテナンスモード切替の判断にしている。

WordPress配下のディレクトリも、このファイルがあればLaravelのメンテナンス画面(503.blade.php)にリダイレクトさせてるというわけ

[紹介元] WordPressタグが付けられた新着投稿 – Qiita Laravelのメンテナンスモード切替をWordPressにも適用する方法

コメント

記事に戻る

コメントを残す