В некоторых случаях владельцу сайта на WordPress необходимо ограничить регистрацию новых пользователей, чтобы избежать спама, массовых регистраций или обеспечить доступ только избранным группам. В этой статье подробно разберём, как можно реализовать такие ограничения с помощью кода и плагинов, а также примеры практического применения.
Почему важно ограничивать регистрацию пользователей в WordPress
Стандартная регистрация в WordPress открыта всем, если включена. Это удобно для сообществ и сайтов с большим числом участников, но часто приводит к нежелательным последствиям:
- Массовые регистрации ботов и спамеров.
- Ненужная нагрузка на базу данных и сервер.
- Появление нежелательных пользователей с негативным влиянием.
- Нарушение политики сайта и безопасности.
Чтобы решать эти задачи, стоит внедрить ограничения по IP, по email, по роли, а также использовать капчу и подтверждения по e-mail.
Ограничение регистрации по email и домену — блокируем нежелательные адреса
Одна из распространённых задач — запретить регистрацию с определённых доменов или конкретных email-адресов. Это удобно, если, например, хотите не пропускать адреса временной почты или корпоративные домены конкурентов.
Добавим следующий код в файл functions.php вашей темы или в отдельный плагин:
function wptool_restrict_registration_email_domain($errors, $sanitized_user_login, $user_email) {
$blocked_domains = array('tempmail.com', 'spamdomain.org');
$email_domain = substr(strrchr($user_email, '@'), 1);
if (in_array($email_domain, $blocked_domains)) {
$errors->add('blocked_email_domain', __('Регистрация с данного домена электронной почты запрещена.'));
}
return $errors;
}
add_filter('registration_errors', 'wptool_restrict_registration_email_domain', 10, 3);В этом коде мы проверяем домен в email, и если он совпадает с запрещённым, регистрация блокируется с сообщением об ошибке.
Расширенные варианты фильтрации email
Можно добавить проверку по шаблону, например, запрещать все временные почтовые сервисы, используя регулярные выражения.
function wptool_restrict_registration_email_pattern($errors, $sanitized_user_login, $user_email) {
$pattern = '/@(tempmail|mailinator|10minutemail)\.com$/i';
if (preg_match($pattern, $user_email)) {
$errors->add('blocked_email_pattern', __('Регистрация с временных почтовых сервисов запрещена.'));
}
return $errors;
}
add_filter('registration_errors', 'wptool_restrict_registration_email_pattern', 10, 3);Ограничение регистрации по IP-адресу — блокируем подозрительные источники
Если вы замечаете массовые регистрации с одних IP или хотите запретить определённые диапазоны IP, можно реализовать блокировку прямо на этапе регистрации.
Пример кода для блокировки IP:
function wptool_block_registration_by_ip($errors) {
$blocked_ips = array('123.45.67.89', '111.222.333.0/24'); // Можно также реализовать проверку диапазонов
$user_ip = $_SERVER['REMOTE_ADDR'];
foreach ($blocked_ips as $ip) {
if (wptool_ip_match($user_ip, $ip)) {
$errors->add('blocked_ip', __('Регистрация с вашего IP-адреса запрещена.'));
break;
}
}
return $errors;
}
add_filter('registration_errors', 'wptool_block_registration_by_ip');
// Функция для проверки IP с учётом маски сети
function wptool_ip_match($ip, $range) {
if (strpos($range, '/') === false) {
return $ip === $range;
} else {
list($subnet, $bits) = explode('/', $range);
$ip = ip2long($ip);
$subnet = ip2long($subnet);
$mask = -1 << (32 - $bits);
$subnet &= $mask;
return ($ip & $mask) === $subnet;
}
}Этот код позволяет блокировать как отдельные IP, так и целые подсети.
Добавление подтверждения регистрации через капчу и email
Для снижения количества ботов рекомендуем использовать капчу (например, Google reCAPTCHA) и подтверждение по email.
Самостоятельная интеграция капчи — сложная задача, но для WordPress существуют отличные плагины, например, Google Captcha (reCAPTCHA) by BestWebSoft. Он легко добавляется на форму регистрации.
Для подтверждения email можно использовать плагин Confirm Email из каталога wpshop.ru, который добавляет обязательную активацию аккаунта по ссылке из письма.
Ограничение регистрации по роли и времени
Иногда нужно ограничить регистрацию определёнными ролями, или разрешать регистрацию только в период проведения акции.
Для этого можно использовать следующий код, который запрещает регистрацию, если пользователь пытается выбрать запрещённую роль или если сейчас не разрешён период регистрации:
function wptool_limit_registration_role_and_time($errors, $sanitized_user_login, $user_email) {
$allowed_roles = array('subscriber');
$requested_role = isset($_POST['role']) ? sanitize_text_field($_POST['role']) : 'subscriber';
// Проверка роли
if (!in_array($requested_role, $allowed_roles)) {
$errors->add('role_not_allowed', __('Регистрация с выбранной ролью запрещена.'));
}
// Ограничение по времени - например, разрешаем регистрацию только с 1 по 10 число месяца
$day = (int)date('j');
if ($day < 1 || $day > 10) {
$errors->add('registration_closed', __('Регистрация сейчас закрыта. Попробуйте позже.'));
}
return $errors;
}
add_filter('registration_errors', 'wptool_limit_registration_role_and_time', 10, 3);Использование плагина Clearfy Pro для расширенного контроля регистраций
Для тех, кто предпочитает готовые решения, рекомендуем обратить внимание на Clearfy Pro. Этот плагин позволяет:
- Отключать регистрацию или настраивать её по IP и email;
- Добавлять капчу без программирования;
- Ограничивать роли и возможности новых пользователей;
- Автоматически блокировать подозрительные регистрации.
Clearfy Pro значительно упрощает задачу контроля доступа и повышает безопасность сайта.
Заключение по ограничению регистрации
Ограничение регистрации — важный инструмент для безопасности и качества аудитории сайта. Комбинируя проверку email, IP, капчу и подтверждение по email, вы сможете значительно уменьшить количество спама и нежелательных пользователей.
Приведённые примеры кода помогут быстро внедрить фильтры без привлечения сторонних плагинов, а если нужна расширенная функциональность — обратите внимание на Clearfy Pro с wpshop.ru.