В WordPress по умолчанию регистрация пользователей либо включена для всех, либо отключена. Однако в некоторых случаях необходимо контролировать, кто может регистрироваться на сайте. Например, ограничить регистрацию только по определенным доменам электронной почты, заблокировать регистрацию по IP, или разрешить регистрацию только после одобрения администратора. В этой статье разберем, как реализовать различные ограничения на регистрацию пользователей в WordPress с помощью кода и плагинов.
Почему важно ограничивать регистрацию пользователей
Без ограничений сайт может столкнуться с массой проблем: спам-боты заполняют базу, создавая некачественных пользователей, злоумышленники пытаются получить доступ к сайту, а нагрузка на сервер увеличивается из-за большого числа фейковых аккаунтов. Это негативно влияет на SEO, безопасность и производительность сайта.
Ограничения позволяют:
- Защитить сайт от спама и брутфорса
- Контролировать аудиторию
- Поддерживать чистоту базы данных пользователей
- Улучшить безопасность и качество пользователей
Ограничение регистрации по домену email
Частая задача — разрешить регистрацию только с корпоративных или определенных почтовых доменов, например, @wptips.ru. Для этого можно использовать хук registration_errors, который срабатывает при регистрации и позволяет добавить собственные проверки.
add_filter('registration_errors', 'wptips_restrict_email_domain', 10, 3);
function wptips_restrict_email_domain($errors, $sanitized_user_login, $user_email) {
$allowed_domains = array('wptips.ru', 'example.com'); // Разрешенные домены
$email_domain = substr(strrchr($user_email, '@'), 1);
if (!in_array($email_domain, $allowed_domains)) {
$errors->add('domain_restriction', __('Регистрация разрешена только с корпоративных адресов.'));
}
return $errors;
}Этот код нужно добавить в файл functions.php вашей темы или в отдельный плагин. При попытке зарегистрировать пользователя с другого домена появится ошибка.
Пояснения к коду
Мы получаем доменную часть email, затем сверяем с массивом разрешенных доменов. Если домен не совпадает, добавляем ошибку в объект $errors, и регистрация не пройдет.
Ограничение количества регистраций с одного IP
Чтобы избежать массовой регистрации с одного IP (часто делают боты), можно фиксировать количество регистраций и блокировать, если лимит превышен.
add_filter('registration_errors', 'wptips_limit_registrations_per_ip', 10, 3);
function wptips_limit_registrations_per_ip($errors, $sanitized_user_login, $user_email) {
$ip = $_SERVER['REMOTE_ADDR'];
$max_registrations = 3; // Максимум регистраций с одного IP
global $wpdb;
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM $wpdb->usermeta WHERE meta_key='registration_ip' AND meta_value=%s",
$ip
));
if ($count >= $max_registrations) {
$errors->add('ip_limit', __('Достигнут лимит регистраций с вашего IP.'));
}
return $errors;
}
add_action('user_register', 'wptips_save_registration_ip');
function wptips_save_registration_ip($user_id) {
$ip = $_SERVER['REMOTE_ADDR'];
update_user_meta($user_id, 'registration_ip', $ip);
}Код считает количество пользователей, зарегистрированных с IP, и не позволяет создавать новых, если лимит достигнут.
Плагины для ограничения регистрации пользователей
Если хотите готовое решение с UI и расширенными настройками, рассмотрите следующие плагины:
- WP Restrict Registration — ограничение по доменам email, капча, проверка IP.
- New User Approve — регистрация с одобрением администратора.
- Stop Spammers — защита от спама, блокировка по IP и другим параметрам.
Как добавить одобрение регистрации вручную
Если нужна регистрация с модерацией, можно отключить автоматический вход и отправлять письмо админу для активации.
add_filter('wp_authenticate_user', 'wptips_restrict_unapproved_users', 10, 2);
function wptips_restrict_unapproved_users($user, $password) {
$approved = get_user_meta($user->ID, 'approved', true);
if (!$approved) {
return new WP_Error('not_approved', __('Ваш аккаунт еще не одобрен.'));
}
return $user;
}
add_action('user_register', 'wptips_set_user_unapproved');
function wptips_set_user_unapproved($user_id) {
update_user_meta($user_id, 'approved', 0);
// Здесь можно добавить отправку письма админу о новой регистрации
}Таким образом, пользователь не сможет войти, пока админ вручную не установит мета-ключ approved в 1.
Резюме и рекомендации
Ограничение регистрации — важный инструмент безопасности и управления сайтом. Начните с простой проверки email домена и добавьте другие фильтры по необходимости. Для более гибкой настройки используйте плагины с поддержкой капчи, одобрения и блокировок по IP.
Для примера плагинов и дополнительных возможностей обратите внимание на продукты из WPSHOP, которые помогут автоматизировать модерацию и улучшить UX при регистрации.