В некоторых случаях владельцам сайтов на WordPress необходимо контролировать процесс регистрации новых пользователей. Это может быть связано с желанием ограничить регистрацию только для определённых доменов электронной почты, запретить регистрацию спам-ботов или разрешить регистрацию по приглашениям. В этой статье подробно рассмотрим несколько рабочих способов установки ограничений на регистрацию в WordPress, включая примеры плагинов и собственных функций.
Почему важно ограничивать регистрацию в WordPress
Регистрация пользователей на сайте — это потенциальная точка уязвимости и источник спама. Если оставить процесс открытым без контроля, можно получить большое количество фейковых аккаунтов, что усложнит администрирование и негативно скажется на репутации сайта.
Ограничения позволяют:
- Принимать только пользователей с допустимыми email-доменами (например, только корпоративные адреса);
- Запретить регистрацию с временных почтовых сервисов, часто используемых спамерами;
- Подключить систему приглашений, чтобы регистрировались только проверенные пользователи;
- Добавить капчу или другие методы защиты от ботов.
Рассмотрим технические решения для реализации этих задач.
Ограничение регистрации по email-домену с помощью кода
Самый надежный и легкий способ — добавить проверку на сервере при регистрации. Для этого воспользуемся хуком registration_errors. Ниже пример функции, которая разрешает регистрацию только с email, заканчивающимися на @example.com и @wp-puzzle.ru:
function wp_puzzle_limit_registration_email_domain( $errors, $sanitized_user_login, $user_email ) {
$allowed_domains = array('example.com', 'wp-puzzle.ru');
$domain = substr(strrchr($user_email, '@'), 1);
if ( ! in_array( strtolower($domain), $allowed_domains ) ) {
$errors->add('domain_error', 'Регистрация разрешена только для корпоративных email-адресов.');
}
return $errors;
}
add_filter('registration_errors', 'wp_puzzle_limit_registration_email_domain', 10, 3);Этот код добавьте в файл functions.php вашей темы или в отдельный плагин. При попытке зарегистрироваться с неподходящим email пользователь увидит ошибку.
Расширение проверки: запрет временных почтовых сервисов
Для борьбы с регистрацией через временные email-сервисы можно использовать готовые списки доменов. Например, можно создать массив с запрещёнными доменами и блокировать их:
function wp_puzzle_block_temp_email_domains( $errors, $sanitized_user_login, $user_email ) {
$blocked_domains = array('tempmail.com', '10minutemail.com', 'mailinator.com');
$domain = substr(strrchr($user_email, '@'), 1);
if ( in_array( strtolower($domain), $blocked_domains ) ) {
$errors->add('temp_email_error', 'Регистрация с временных почтовых адресов запрещена.');
}
return $errors;
}
add_filter('registration_errors', 'wp_puzzle_block_temp_email_domains', 10, 3);Эти два фильтра можно объединить или расширить для более гибкой логики.
Использование плагинов для ограничения регистрации
Если вы предпочитаете готовые решения, воспользуйтесь следующими плагинами:
- Restrict User Signups — позволяет ограничить регистрацию по доменам email, установить капчу, настроить приглашения.
- WP Email Restrictions — простой плагин для ограничения по email-доменам.
- Invite Anyone — реализует систему приглашений, чтобы регистрация была доступна только по приглашению.
Все эти плагины можно найти и установить через админ-панель WordPress или скачать с официального репозитория.
Добавление капчи для защиты от спам-ботов
Ограничения по email не всегда защищают от автоматизированных регистраций. Для дополнительной защиты рекомендуется использовать капчу, например, Google reCAPTCHA.
Для интеграции капчи можно использовать плагин My Popup с поддержкой reCAPTCHA или отдельные плагины вроде Really Simple CAPTCHA.
Реализация системы приглашений с помощью кода
Если хотите сделать регистрацию только по приглашениям без плагинов, можно добавить поле для ввода кода приглашения и проверять его на сервере. Пример:
function wp_puzzle_show_invite_code_field() {
?>
<p>
<label for="invite_code">Код приглашения<br />
<input type="text" name="invite_code" id="invite_code" class="input" value="" size="25" /></label>
</p>
<?php
}
add_action('register_form', 'wp_puzzle_show_invite_code_field');
function wp_puzzle_validate_invite_code( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['invite_code'] ) || $_POST['invite_code'] !== 'SECRET123' ) {
$errors->add('invite_code_error', 'Неверный код приглашения.');
}
return $errors;
}
add_filter('registration_errors', 'wp_puzzle_validate_invite_code', 10, 3);Вместо статического кода 'SECRET123' можно подключить проверку из базы или другого источника.
Советы по корректной работе и безопасности
При добавлении ограничений на регистрацию важно:
- Тестировать все изменения на тестовом сайте, чтобы не заблокировать себя.
- Информировать пользователей об ограничениях в форме регистрации.
- Обновлять списки запрещённых доменов и коды приглашений.
- Использовать HTTPS для защиты данных при регистрации.
Заключение
Ограничение регистрации в WordPress — важная задача для поддержания качества пользователей и безопасности сайта. С помощью простых хуков, примеров кода и проверенных плагинов можно быстро настроить фильтры по email-доменам, реализовать капчу и систему приглашений. Рекомендуем комбинировать методы для максимальной защиты.
Если хотите упростить работу с отзывами или аналитикой, посмотрите плагины из WPShop — они помогут расширить функционал вашего сайта на WordPress.