Автоматическая регистрация пользователей — востребованная функция для многих сайтов на WordPress, особенно если вы хотите расширить базу пользователей без лишних ручных действий. Однако важно не только зарегистрировать пользователя, но и обеспечить подтверждение email для предотвращения спама и повышения безопасности. В этой статье мы подробно разберём, как реализовать такую регистрацию с проверкой email, используя минимальное количество плагинов и собственный код.
Зачем нужна автоматическая регистрация с подтверждением email
Часто на сайтах нужно, чтобы пользователь мог быстро зарегистрироваться и сразу получить доступ к определённым функциям. При этом важно убедиться, что указанный email реальный, чтобы избежать регистрации ботов и «мусорных» аккаунтов. Подтверждение email — эффективный способ защитить сайт и повысить качество аудитории.
Кроме того, автоматическая регистрация с подтверждением позволяет сразу после регистрации отправлять пользователю приветственные письма, инструкции и персональные предложения.
В WordPress из коробки есть базовая регистрация, но она не предусматривает верификацию email и не всегда удобна с точки зрения UX. Поэтому мы рассмотрим, как можно улучшить этот процесс.
Выбор плагина для верификации email при регистрации
Существует несколько плагинов, которые позволяют добавить подтверждение email в процесс регистрации. Вот самые популярные и простые в использовании:
- WP Email Verification — лёгкий плагин для отправки письма с кодом подтверждения;
https://ru.wordpress.org/plugins/wp-email-verification/ - RegistrationMagic — мощный инструмент для кастомизации регистрации с подтверждением email и дополнительными полями;
https://wordpress.org/plugins/custom-registration-form-builder-with-submission-manager/ - Clearfy Pro (с функцией верификации) — помогает оптимизировать регистрацию и безопасность;
https://wpshop.ru/clearfy-pro?utm_source=wpshab.ru&utm_medium=article&utm_campaign=kak-sozdat-avtomaticheskuyu-registraciyu-polzovateley-v-wordpress
Если вы хотите максимально контролировать процесс, можно реализовать регистрацию с подтверждением через собственный плагин или функции темы.
Реализация автоматической регистрации с подтверждением email на примере кода
Ниже рассмотрим упрощённый пример, как можно реализовать процесс регистрации с отправкой письма с уникальной ссылкой подтверждения. Такой подход позволит зарегистрировать пользователя, но активировать его аккаунт только после перехода по ссылке.
Создание формы регистрации
Добавим на страницу простой HTML-форму регистрации:
<form method="post" action="">
<input type="email" name="wpshab_email" placeholder="Ваш email" required />
<input type="password" name="wpshab_password" placeholder="Пароль" required />
<input type="submit" name="wpshab_register" value="Зарегистрироваться" />
</form>
Обработка регистрации и отправка письма
Добавим обработчик в functions.php вашей темы или в плагин:
function wpshab_handle_user_registration() {
if ( isset($_POST['wpshab_register']) ) {
$email = sanitize_email($_POST['wpshab_email']);
$password = $_POST['wpshab_password'];
if ( !is_email($email) ) {
echo '<p>Некорректный email.</p>';
return;
}
if ( email_exists($email) ) {
echo '<p>Пользователь с таким email уже зарегистрирован.</p>';
return;
}
$user_login = current(explode('@', $email));
$activation_key = wp_generate_password(20, false);
// Создаём пользователя, но ставим статус неактивным
$user_id = wp_create_user($user_login, $password, $email);
if ( is_wp_error($user_id) ) {
echo '<p>Ошибка регистрации пользователя.</p>';
return;
}
update_user_meta($user_id, 'wpshab_activation_key', $activation_key);
update_user_meta($user_id, 'wpshab_is_activated', 0);
$activation_link = add_query_arg(array(
'wpshab_activate' => $user_id,
'key' => $activation_key
), site_url());
$subject = 'Подтверждение регистрации на сайте ' . get_bloginfo('name');
$message = "Здравствуйте!\n\nДля подтверждения регистрации перейдите по ссылке: " . $activation_link;
wp_mail($email, $subject, $message);
echo '<p>Проверьте вашу почту для подтверждения регистрации.</p>';
}
}
add_action('wp_head', 'wpshab_handle_user_registration');
Обработка активации аккаунта
Добавим проверку ссылки с активацией при загрузке любой страницы:
function wpshab_handle_user_activation() {
if ( isset($_GET['wpshab_activate'], $_GET['key']) ) {
$user_id = intval($_GET['wpshab_activate']);
$key = sanitize_text_field($_GET['key']);
$saved_key = get_user_meta($user_id, 'wpshab_activation_key', true);
$activated = get_user_meta($user_id, 'wpshab_is_activated', true);
if ( $activated ) {
echo '<p>Ваш аккаунт уже активирован.</p>';
return;
}
if ( $key === $saved_key ) {
update_user_meta($user_id, 'wpshab_is_activated', 1);
delete_user_meta($user_id, 'wpshab_activation_key');
echo '<p>Регистрация подтверждена! Теперь вы можете войти на сайт.</p>';
} else {
echo '<p>Неверный ключ активации.</p>';
}
}
}
add_action('wp_head', 'wpshab_handle_user_activation');
Ограничение входа неактивных пользователей
Чтобы не позволять неактивированным пользователям входить, добавим проверку при попытке авторизации:
function wpshab_prevent_login_if_not_activated($user, $username, $password) {
$user_data = get_user_by('login', $username);
if ( $user_data ) {
$activated = get_user_meta($user_data->ID, 'wpshab_is_activated', true);
if ( !$activated ) {
return new WP_Error('activation_required', '<strong>Ошибка:</strong> Ваш аккаунт не активирован. Проверьте почту.');
}
}
return $user;
}
add_filter('authenticate', 'wpshab_prevent_login_if_not_activated', 30, 3);
Дополнительные рекомендации и плагины для улучшения процесса
Если вы хотите расширить функционал регистрации, обратите внимание на следующие решения:
- WPRemark — для создания кастомных форм регистрации и управления ими;
Подробнее на wpshop.ru - Clearfy Pro — оптимизация безопасности и управления регистрацией;
Подробнее на wpshop.ru - Добавление капчи (например, Google reCAPTCHA) для защиты от спама.
Такой подход гарантирует, что ваша база пользователей будет чистой, а процесс регистрации — удобным и надёжным.