プラグインなしで管理者以外にメンテナンス画面を表示する方法

Cocoonカスタマイズ集
この記事は約4分で読めます。
記事内に広告が含まれています。

はじめに

プラグイン「Maintenance」を使う場合、メンテナンスモードのオン・オフを切り替えるには、ツールバーから専用の設定画面に移動する必要があります。

そこで、プラグインを使わずに、ツールバーのメニューをクリックするだけでリアルタイムにメンテナンスモードのオン・オフを切り替えます。

さらに、HTTPステータスコード503(Service Unavailable)を返すことで、検索エンジンに「一時的にサイトが利用できない」ことを正しく伝えられ、SEO上の評価を下げずに安全にサイトを一時停止できます。

この記事では、この方法について説明します。

完成イメージ

ツールバー
メンテナンス画面

実装手順

以下のコードをfunctions.phpに追加します。

// ツールバーにメニュー追加
add_action('admin_bar_menu', function ($wp_admin_bar) {
  // 権限チェック
  if (!current_user_can('manage_options')) {
    return;
  }

  // 現在のメンテナンス状態を取得
  $status = get_option('my_maintenance_mode', false);

  // 表示ラベルと色を状態に応じて変更
  $label = $status ? 'メンテナンス:ON' : 'メンテナンス:OFF';
  $color = $status ? 'color: #ff0000' : 'color: #fff';

  // 現在のURLにnonceを付与して安全に生成
  $current_url = wp_nonce_url(
    remove_query_arg('maintenance_nonce'),
    'maintenance_action',
    'maintenance_nonce'
  );

  // ツールバーにメニューを追加
  $wp_admin_bar->add_node([
    'id'    => 'maintenance_switch',
    'title' => '<span style="' . esc_attr($color) . '">' . esc_html($label) . '</span>',
    'href'  => $current_url,
    'meta'  => ['title' => 'メンテナンスモード切り替え'],
  ]);
}, 100);


// 対象の処理を実行
add_action('init', function () {
  if (!isset($_GET['maintenance_nonce'])) {
    return;
  }

  // nonceチェック
  if (!wp_verify_nonce($_GET['maintenance_nonce'], 'maintenance_action')) {
    wp_die('セキュリティチェックに失敗しました。', 403);
  }

  // 権限チェック
  if (!current_user_can('manage_options')) {
    return;
  }

  // 現在の状態を取得して反転
  $status = get_option('my_maintenance_mode', false);
  update_option('my_maintenance_mode', !$status);

  // nonceを削除してリロード
  $redirect_url = remove_query_arg('maintenance_nonce');
  wp_safe_redirect($redirect_url);
  exit;
});


// メンテナンスモードを表示
add_action('template_redirect', function () {
  // 権限チェック
  if (current_user_can('manage_options')) {
    return;
  }

  // メンテナンスモードが有効なら503エラー画面を表示
  if (get_option('my_maintenance_mode', false)) {
    wp_die(
      '<h1>現在メンテナンス中です</h1><p>しばらくお待ちください。</p>',
      'メンテナンスモード',
      ['response' => 503]
    );
  }
});

さいごに

今回紹介した方法を使えば、プラグインを使わずに、ツールバーのワンクリックで簡単にメンテナンスモードのオン・オフが切り替えられます。
管理者だけがサイトを操作できる状態を維持しつつ、訪問者には503ステータスで適切にメンテナンス中を通知できるため、SEOへの影響も抑えられます。

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