В стандартной регистрации WordPress нет встроенной функции подтверждения email, что может привести к регистрации фейковых аккаунтов и спаму. В этой статье разберём, как добавить на сайт WordPress расширенные настройки регистрации с подтверждением email, чтобы повысить безопасность и качество базы пользователей.
Почему важно использовать подтверждение email при регистрации
Подтверждение email защищает сайт от регистрации ботов и недействительных адресов. Это важно для сообществ, интернет-магазинов и любых проектов с пользовательской регистрацией, где нужна реальная аудитория. Без подтверждения email вы рискуете получить большое количество неактивных или фейковых аккаунтов, что усложняет администрирование и ухудшает аналитику.
Также подтверждённый email облегчает восстановление доступа и коммуникацию с пользователем. Поэтому добавление такой функции – одна из важных задач при доработке регистрации.
Как реализовать подтверждение email в WordPress – обзор подходов
Есть несколько способов добавить подтверждение email:
- Использовать готовые плагины, например, WPCommunity с поддержкой подтверждения email;
- Воспользоваться плагинами для расширения регистрации, например, Clearfy Pro;
- Реализовать кастомное решение с помощью хуков WordPress и отправки писем вручную.
Рассмотрим вариант с кастомным кодом, который можно встроить в functions.php вашей темы или в отдельный плагин, чтобы лучше понять механизм и при необходимости гибко его настроить.
Код для добавления подтверждения email при регистрации на WordPress
Основная идея – при регистрации сохранять пользователя с меткой «неактивен» и отправлять письмо с ссылкой активации. Только после перехода по ссылке аккаунт становится активным.
1. Создание пользовательского статуса и хранение токена активации
function wppremium_register_user_with_email_confirmation($user_id) {
// Генерируем уникальный токен
$token = bin2hex(random_bytes(16));
// Сохраняем токен в метаданных пользователя
update_user_meta($user_id, 'wppremium_email_confirm_token', $token);
// Устанавливаем статус пользователя как неактивного
update_user_meta($user_id, 'wppremium_email_confirmed', 0);
// Получаем email
$user_info = get_userdata($user_id);
$email = $user_info->user_email;
// Формируем ссылку активации
$activation_link = add_query_arg(
array(
'wppremium_confirm_email' => $user_id,
'token' => $token
), home_url('/'));
// Отправляем письмо
wp_mail($email, 'Подтверждение регистрации', 'Перейдите по ссылке для активации вашего аккаунта: ' . $activation_link);
}
add_action('user_register', 'wppremium_register_user_with_email_confirmation');Этот код срабатывает при регистрации нового пользователя, генерирует токен, сохраняет его и отправляет письмо с ссылкой.
2. Обработка перехода по ссылке активации
function wppremium_confirm_user_email() {
if (isset($_GET['wppremium_confirm_email'], $_GET['token'])) {
$user_id = intval($_GET['wppremium_confirm_email']);
$token = sanitize_text_field($_GET['token']);
$saved_token = get_user_meta($user_id, 'wppremium_email_confirm_token', true);
$confirmed = get_user_meta($user_id, 'wppremium_email_confirmed', true);
if ($confirmed) {
echo 'Ваш аккаунт уже активирован.';
exit;
}
if ($saved_token && hash_equals($saved_token, $token)) {
update_user_meta($user_id, 'wppremium_email_confirmed', 1);
delete_user_meta($user_id, 'wppremium_email_confirm_token');
echo 'Спасибо, ваш аккаунт активирован! Теперь вы можете войти.';
} else {
echo 'Неверный или просроченный токен активации.';
}
exit;
}
}
add_action('init', 'wppremium_confirm_user_email');Данная функция проверяет параметры в URL, сверяет токен и активирует аккаунт.
3. Блокировка входа для неактивированных пользователей
function wppremium_block_unconfirmed_login($user, $username, $password) {
if (is_a($user, 'WP_User')) {
$confirmed = get_user_meta($user->ID, 'wppremium_email_confirmed', true);
if ($confirmed != 1) {
return new WP_Error('email_not_confirmed', __('Ошибка: ваш email не подтверждён. Проверьте почту.'));
}
}
return $user;
}
add_filter('authenticate', 'wppremium_block_unconfirmed_login', 30, 3);Без подтверждения email пользователь не сможет войти в админку или личный кабинет.
Настройки плагинов для упрощения подтверждения email
Если вы не хотите писать код, рекомендуем обратить внимание на следующие плагины:
- WPCommunity – комплексный плагин для сообществ с поддержкой подтверждения email, ролей и расширенной регистрации.
- Clearfy Pro – оптимизация и безопасность, включая расширенные настройки регистрации и подтверждения.
Они позволяют гибко настраивать уведомления, сроки действия токенов и интегрируются с популярными формами регистрации.
Дополнительные советы по безопасности регистрации в WordPress
Для повышения качества регистрации и безопасности рекомендуем:
- Использовать reCAPTCHA или другие антибот-системы;
- Ограничивать количество попыток регистрации с одного IP;
- Использовать двухфакторную аутентификацию (2FA) для пользователей;
- Регулярно проверять базу пользователей на «мертвые» аккаунты и спам.
Все эти меры вместе дают высокий уровень защиты и контроля за регистрацией.
Выводы
Добавление подтверждения email в регистрацию WordPress – простой, но эффективный способ повысить безопасность и качество пользователей на сайте. Вы можете использовать как кастомный код, приведённый выше, так и популярные плагины с подобным функционалом. Обязательно блокируйте вход для неподтверждённых пользователей, чтобы исключить доступ фейков.
Используйте ссылки на плагины от WPShop с utm-метками для удобства и поддержки разработчиков: