【WordPress】プラグインを使わずにメンテナンスモードを表示する

「準備中」や「メンテナンス中」などの表示を出す方法です。

LightStartっていうプラグインとか、メンテナンス中表示のプラグインはあるのでそれを使いたかったのですが、サーバーとうまくアクセスできなかったりしてプラグインが使えないときに手動でfunctions.phpに書きこみます。

参考にさせていただいたサイト↓

基本のコード

上記サイトのコードですが、以下のようなコードで「メンテナンス中」表示が出ます

function theme_maintenance_mode() {
    if ( !current_user_can( 'edit_themes' ) || !is_user_logged_in() ) {
        wp_die('メンテナンス中です。しばらくお待ちください。','メンテナンス中');
    }
}
add_action('get_header', 'theme_maintenance_mode');

が、最近はデフォルトで入ってるテーマがFSE(フルサイト編集)のテーマで、get_header関数が呼ばれないらしく、フックが機能してなくてうまくいかないみたいです…。

FSE向けのコード

function theme_maintenance_mode() {
    if ( !current_user_can( 'edit_themes' ) || !is_user_logged_in() ) {
        $html = '
        <style>
            body {
                background-color: #f9f9f9;
                font-family: "Helvetica Neue", Arial, sans-serif;
                color: #333;
                display: flex;
                justify-content: center;
                align-items: center;
                height: 100vh;
                margin: 0;
            }
            .maintenance-container {
                text-align: center;
                border: 1px solid #ccc;
                padding: 40px;
                border-radius: 10px;
                background-color: #fff;
                box-shadow: 0 4px 10px rgba(0,0,0,0.1);
            }
            .maintenance-container h1 {
                font-size: 2em;
                margin-bottom: 10px;
                color: #222;
            }
            .maintenance-container p {
                font-size: 1.2em;
                color: #666;
            }
        </style>
        <div class="maintenance-container">
            <h1>メンテナンス中</h1>
            <p>しばらくお待ちください。</p>
        </div>';

        wp_die( $html, 'メンテナンス中', array( 'response' => 503 ) );
    }
}
add_action('template_redirect', 'theme_maintenance_mode');

template_redirectというアクションフックに変更しています。タイミングはページを表示する直前で、よく利用するwp_headなどよりも若干早いらしいです。

  1. wp
  2. template_redirect
  3. get_header
  4. wp_head
  5. wp_enqueue_scripts
  6. wp_print_styles
  7. wp_print_scripts

権限としては編集権限があり、かつログインしているという結構厳しめな条件がついており、この条件にあてはまらない人にはメンテナンス中という表示が出ます。

プラグインはなるべくいれたくないし、簡単に表示できるならこれでいいかもしれませんね