Стандартная регистрация пользователей в WordPress достаточно проста и ограничена базовым функционалом. Часто возникает необходимость кастомизировать процесс регистрации — добавить новые поля, изменить логику валидации, отправлять дополнительные уведомления или даже запретить регистрацию по определённым условиям. В этой статье мы подробно разберём, как изменить регистрацию пользователей без использования плагинов, используя собственные функции и хуки WordPress.
Почему стоит изменить регистрацию пользователей без плагинов
Плагины часто удобны, но они увеличивают нагрузку на сайт и могут конфликтовать с другими расширениями. Если у вас специфические требования к регистрации, проще и эффективнее реализовать их самостоятельно. Такой подход ускорит сайт и даст полный контроль над процессом.
Кроме того, нативная реализация позволяет лучше понять внутреннюю логику WordPress и создавать максимально оптимальный код.
Добавление новых полей в форму регистрации
По умолчанию форма регистрации содержит только поля для имени пользователя и email. Чтобы добавить дополнительные поля, например, телефон и согласие с правилами, нужно использовать хук register_form. Вот пример функции, которая добавляет новые поля:
function wpteam_add_custom_registration_fields() {
?>
<p>
<label for="phone">Телефон<br />
<input type="text" name="phone" id="phone" class="input" value="<?php echo esc_attr( wpteam_get_post_value('phone') ); ?>" size="25" /></label>
</p>
<p>
<label>
<input type="checkbox" name="terms" id="terms" value="1" <?php checked( wpteam_get_post_value('terms'), 1 ); ?> /> Я согласен с правилами сайта
</label>
</p>
<?php
}
add_action('register_form', 'wpteam_add_custom_registration_fields');
function wpteam_get_post_value($key) {
return isset($_POST[$key]) ? sanitize_text_field($_POST[$key]) : '';
}Этот код добавляет поле для телефона и чекбокс согласия. Функция wpteam_get_post_value помогает сохранить введённые данные при ошибках.
Валидация и обработка новых полей при регистрации
Добавленные поля нужно проверить и сохранить. Для валидации используем хук registration_errors, для сохранения — user_register.
function wpteam_validate_custom_registration_fields($errors, $sanitized_user_login, $user_email) {
if (empty($_POST['phone'])) {
$errors->add('phone_error', 'Пожалуйста, укажите телефон.');
} elseif (!preg_match('/^\+?\d{7,15}$/', $_POST['phone'])) {
$errors->add('phone_error', 'Неверный формат телефона.');
}
if (empty($_POST['terms'])) {
$errors->add('terms_error', 'Необходимо согласиться с правилами.');
}
return $errors;
}
add_filter('registration_errors', 'wpteam_validate_custom_registration_fields', 10, 3);
function wpteam_save_custom_registration_fields($user_id) {
if (!empty($_POST['phone'])) {
update_user_meta($user_id, 'phone', sanitize_text_field($_POST['phone']));
}
}
add_action('user_register', 'wpteam_save_custom_registration_fields');В этом примере проверяется, что телефон введён и соответствует простому шаблону, а также что пользователь поставил галочку согласия. После успешной регистрации телефон сохраняется в метаданные пользователя.
Изменение поведения после регистрации
Иногда нужно перенаправлять пользователя на определённую страницу после регистрации или отправлять кастомные письма. Для этого используйте хук registration_redirect и функцию wp_mail.
function wpteam_custom_registration_redirect() {
return home_url('/welcome/'); // Перенаправление на страницу приветствия
}
add_filter('registration_redirect', 'wpteam_custom_registration_redirect');
function wpteam_send_welcome_email($user_id) {
$user = get_userdata($user_id);
$to = $user->user_email;
$subject = 'Добро пожаловать на сайт!';
$message = 'Спасибо за регистрацию, ' . $user->user_login . '! Мы рады видеть вас.';
wp_mail($to, $subject, $message);
}
add_action('user_register', 'wpteam_send_welcome_email');Так вы улучшите пользовательский опыт, сразу направляя новоиспечённых пользователей на нужные страницы и поддерживая их вовлечённость с помощью писем.
Советы по безопасности при кастомной регистрации
При работе с регистрацией важно уделять внимание безопасности. Обязательно используйте функции санитизации и валидации, чтобы предотвратить инъекции и XSS-атаки.
Также рекомендуется использовать wp_nonce_field и проверять nonce в обработчиках, если регистрация идёт через кастомные формы. В стандартной форме WordPress nonce уже есть, но при кастомизации можно добавить дополнительные меры.
Не забывайте ограничивать частоту регистраций с одного IP при помощи сторонних механизмов или серверных настроек, чтобы избежать спама.
Пример расширенной кастомной регистрации с использованием WPShop
Если вы хотите добавить расширенные функции, например, динамическую валидацию или интеграцию с CRM, можно использовать плагины из WPShop.ru, например, Clearfy Pro для оптимизации безопасности и отключения лишних функций, или Expert Review для сбора дополнительной информации о пользователях.
Но если нужен минимализм, описанные выше методы справятся без плагинов и обеспечат надёжный и гибкий процесс регистрации.