Как ограничить количество пользователей для регистрации на сайте WordPress?

Ссылка скопирована
1 ответ

Есть задача: ограничить количество зарегистрированных пользователей на сайте до 140. Как автоматически настроить ограничение, чтобы 141-й пользователь не смог зарегистрироваться?

Дополнительно

Ответы:

Отключаем возможность регистрации пользователей, если их более 140, и включаем обратно, если их мене 140, functions.php:

add_action('init', function() {     $limit = 140;     $count_users = count_users();     $total_users = $count_users['total_users'];      if($total_users > $limit) {         update_option('users_can_register', false);     } else {         update_option('users_can_register', true);     } });

add_action('init', function() { $limit = 140; $count_users = count_users(); $total_users = $count_users['total_users']; if($total_users > $limit) { update_option('users_can_register', false); } else { update_option('users_can_register', true); } });

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Стас DB Ответ

Ограничение регистрации до 140 пользователей лучше делать на этапе валидации регистрации, а не постоянным переключением настройки users_can_register на каждом init. Глобальную настройку легко задеть сторонним плагином, а запись в options на каждом запросе создаёт лишнюю нагрузку и может дать неожиданные эффекты.

Для стандартной формы регистрации WordPress достаточно фильтра:

add_filter('registration_errors', function ($errors, $sanitized_user_login, $user_email) {
    $count = count_users();
    $total = (int) ($count['total_users'] ?? 0);
 
    if ($total >= 140) {
        $errors->add('users_limit_reached', 'Регистрация закрыта: лимит пользователей достигнут.');
    }
 
    return $errors;
}, 10, 3);

add_filter('registration_errors', function ($errors, $sanitized_user_login, $user_email) { $count = count_users(); $total = (int) ($count['total_users'] ?? 0); if ($total >= 140) { $errors->add('users_limit_reached', 'Регистрация закрыта: лимит пользователей достигнут.'); } return $errors; }, 10, 3);

Если регистрация идёт через WooCommerce, добавьте отдельную проверку:

add_filter('woocommerce_registration_errors', function ($errors) {
    $count = count_users();
    if ((int) ($count['total_users'] ?? 0) >= 140) {
        $errors->add('users_limit_reached', 'Регистрация закрыта: лимит пользователей достигнут.');
    }
    return $errors;
});

add_filter('woocommerce_registration_errors', function ($errors) { $count = count_users(); if ((int) ($count['total_users'] ?? 0) >= 140) { $errors->add('users_limit_reached', 'Регистрация закрыта: лимит пользователей достигнут.'); } return $errors; });

Уточните, кого именно нужно считать. count_users() считает всех пользователей: администраторов, редакторов, клиентов, подписчиков. Если лимит относится только к клиентам или подписчикам, нужно считать пользователей по роли, иначе несколько админов тоже займут места в лимите.

  • Код размещайте в дочерней теме, site-specific plugin или mu-plugin.
  • Сообщение ошибки лучше сделать понятным для пользователя.
  • Административное создание пользователей можно оставить разрешённым отдельно, если это требуется процессом.

Для строгого лимита при высокой одновременной регистрации может понадобиться дополнительная проверка непосредственно перед созданием пользователя, но для обычного сайта фильтра валидации обычно достаточно.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно