2026年5月20日

2026年5月20日

WordPressのユーザー登録を無効にする方法

はじめに

WordPressはデフォルトでユーザー登録ページ(/wp-login.php?action=register)が公開されています。不特定多数の登録が不要なサイトではこの機能を無効化することでスパム登録やセキュリティリスクを防げます。

方法1:管理画面から無効化(最も簡単)

管理画面 → 設定 → 一般 → メンバーシップ
→「だれでもユーザー登録ができるようにする」のチェックを外す
# WP-CLIで確認・設定
wp option get users_can_register
wp option update users_can_register 0

方法2:wp-config.phpで強制無効化

// wp-config.php
// 管理画面からの変更を上書きして強制無効化
define('DISALLOW_FILE_MODS', false); // この設定とは別に↓
// 登録自体を無効化するには option が確実

方法3:functions.phpで登録ページをブロック

// functions.php — 登録ページへのアクセスをリダイレクト
add_action('init', function() {
    if (is_admin()) return;

    $action = $_GET['action'] ?? '';
    if ($action === 'register') {
        wp_redirect(home_url());
        exit;
    }
});

// 登録フォームの送信もブロック
add_filter('registration_errors', function($errors) {
    $errors->add('registration_disabled', '現在ユーザー登録は受け付けていません。');
    return $errors;
}, 1);

登録メールを管理者に通知しない

// functions.php — 新規ユーザー登録の管理者通知メールを無効化
add_filter('wp_new_user_notification_email_admin', '__return_false');

// ユーザー本人への通知も無効化
add_filter('wp_new_user_notification_email', '__return_false');

招待制登録を実装する

完全に無効化せず、招待コードを持つユーザーのみ登録できるようにする方法:

// 登録時に招待コードを検証
add_filter('registration_errors', function($errors, $sanitized_user_login, $user_email) {
    $invite_code = $_POST['invite_code'] ?? '';
    $valid_codes = ['CODE2024', 'MEMBER001']; // 実際はDBで管理

    if (!in_array($invite_code, $valid_codes)) {
        $errors->add('invalid_invite', '有効な招待コードが必要です。');
    }
    return $errors;
}, 10, 3);

REST APIからの登録をブロック

// REST API経由のユーザー作成をブロック
add_filter('rest_pre_insert_user', function($prepared_user, $request) {
    if (!current_user_can('create_users')) {
        return new WP_Error('rest_forbidden', '権限がありません。', ['status' => 403]);
    }
    return $prepared_user;
}, 10, 2);

注意事項

  • WooCommerceなど会員機能を使うプラグインがある場合、ユーザー登録の無効化で機能が壊れる場合があります
  • users_can_register0 にしても、REST APIや一部プラグイン経由での登録は別途対策が必要です

まとめ

最も簡単な方法は管理画面の「メンバーシップ」チェックを外すか wp option update users_can_register 0 です。完全にブロックするには init フックでのリダイレクトと registration_errors フィルタを組み合わせてください。

お気軽にご相談ください

お見積りへ お問い合わせへ