2026年5月20日
2026年5月20日
WordPressのメンテナンスモード中に管理者だけログインを許可する方法
はじめに
WordPressのメンテナンスモード中でも管理者や開発者はサイトを確認したい場面があります。wp_maintenance フィルタを使えば、特定のIPアドレスや管理者ユーザーをメンテナンス画面から除外できます。
WordPressのメンテナンスモードの仕組み
- コアアップデート中:
.maintenanceファイルが自動生成 - WP-CLIで手動作成:
wp maintenance-mode activate - プラグインで設定:Coming Soon / Maintenance Mode プラグイン等
解決手順
ステップ1:wp_maintenanceフィルタで管理者を除外する
// functions.php — メンテナンスモード中でも管理者はアクセス可能
add_filter('wp_maintenance', function($enable) {
// ログイン済みの管理者は除外
if (current_user_can('manage_options')) {
return false;
}
return $enable;
});
ステップ2:IPアドレスで除外する
// functions.php — 特定IPアドレスをメンテナンス画面から除外
add_filter('wp_maintenance', function($enable) {
$allowed_ips = [
'203.0.113.10', // 開発者の自宅IP
'198.51.100.0/24', // オフィスのネットワーク
];
$client_ip = $_SERVER['REMOTE_ADDR'] ?? '';
foreach ($allowed_ips as $allowed_ip) {
if (strpos($allowed_ip, '/') !== false) {
// CIDRサブネットチェック
[$subnet, $bits] = explode('/', $allowed_ip);
$subnet_long = ip2long($subnet);
$client_long = ip2long($client_ip);
$mask = -1 << (32 - (int)$bits);
if (($client_long & $mask) === ($subnet_long & $mask)) {
return false;
}
} elseif ($client_ip === $allowed_ip) {
return false;
}
}
return $enable;
});
ステップ3:WP-CLIでメンテナンスモードを制御する
# メンテナンスモードを有効化
wp maintenance-mode activate
# メンテナンスモードの状態を確認
wp maintenance-mode status
# メンテナンスモードを無効化
wp maintenance-mode deactivate
# .maintenance ファイルを手動で削除(緊急時)
rm /path/to/wordpress/.maintenance
ステップ4:カスタムメンテナンスページを作成する
// wp-content/maintenance.php(このファイルが存在すると自動使用される)
<?php
header('HTTP/1.1 503 Service Unavailable');
header('Retry-After: 3600');
?>
<!DOCTYPE html>
<html lang="ja">
<head><meta charset="UTF-8"><title>メンテナンス中</title></head>
<body>
<h1>メンテナンス中</h1>
<p>現在システムメンテナンスのため一時的にサービスを停止しています。<br>
しばらくしてから再度アクセスしてください。</p>
</body>
</html>
注意事項
wp_maintenanceフィルタはwp-includes/load.phpの早い段階で実行されるため、プラグインが完全にロードされる前に実行される場合があります。current_user_can()はCookieベースなので動作しますが、一部の関数は使用できません.maintenanceファイルが残ったままになるとサイトが永続的にメンテナンス状態になります。アップデート失敗後はSSHやFTPで手動削除してくださいRetry-Afterヘッダーを設定することで検索エンジンが適切にクロールを延期します
まとめ
メンテナンスモード中に管理者のみアクセスを許可するには wp_maintenance フィルタで current_user_can('manage_options') を確認します。IPアドレス制御と組み合わせることで柔軟なアクセス制御が可能です。