Часто стандартной формы регистрации WordPress недостаточно, особенно если нужно собрать дополнительные данные от пользователя или реализовать подтверждение email для повышения безопасности и качества базы пользователей. В этой статье мы детально разберём, как добавить своё поле в форму регистрации, как валидировать введённые данные и как реализовать подтверждение email с помощью кода и плагинов.
Почему стоит добавлять свои поля в форму регистрации WordPress
Стандартная регистрация WordPress содержит минимум полей — логин, email, пароль (если включена соответствующая опция). Однако в реальных проектах часто требуется собрать дополнительную информацию, например, номер телефона, дату рождения, согласие с правилами или другие данные. Без добавления полей и валидации собрать эти данные невозможно.
Кроме того, подтверждение email снижает количество фейковых и спам-аккаунтов, повышая качество аудитории и защищая сайт от злоупотреблений.
Добавление полей вручную и реализация подтверждения email позволяют гибко настроить процесс регистрации и не зависеть от сторонних сервисов.
Добавление пользовательского поля в форму регистрации
Для начала добавим новое поле в форму регистрации WordPress. Мы будем использовать хуки register_form для вывода поля и registration_errors для проверки введённых данных.
Пример добавления поля «Телефон»:
function wptask_add_phone_field() {
$phone = isset( $_POST['wptask_phone'] ) ? sanitize_text_field( $_POST['wptask_phone'] ) : '';
?>
<p>
<label for="wptask_phone">Телефон <span style="color: red;">*</span></label><br>
<input type="text" name="wptask_phone" id="wptask_phone" class="input" value="<?php echo esc_attr( $phone ); ?>" size="25" />
</p>
<?php
}
add_action( 'register_form', 'wptask_add_phone_field' );Здесь мы выводим текстовое поле для телефона. Значение сохраняется при ошибках, чтобы пользователь не вводил заново.
Валидация нового поля при регистрации
Важно не только вывести поле, но и проверить, что пользователь ввёл корректные данные. Для этого используем фильтр registration_errors:
function wptask_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['wptask_phone'] ) || ! preg_match( '/^\+?\d{10,15}$/', $_POST['wptask_phone'] ) ) {
$errors->add( 'phone_error', '<strong>Ошибка:</strong> Пожалуйста, введите корректный номер телефона.' );
}
return $errors;
}
add_filter( 'registration_errors', 'wptask_validate_phone_field', 10, 3 );Регулярное выражение проверяет, что номер телефона содержит от 10 до 15 цифр, возможно с плюсом в начале. При ошибке регистрации пользователь увидит сообщение.
Сохранение пользовательского поля в метаданные
После успешной регистрации нужно сохранить телефон в метаданных пользователя:
function wptask_save_phone_field( $user_id ) {
if ( ! empty( $_POST['wptask_phone'] ) ) {
update_user_meta( $user_id, 'wptask_phone', sanitize_text_field( $_POST['wptask_phone'] ) );
}
}
add_action( 'user_register', 'wptask_save_phone_field' );Теперь телефон можно получить для любого пользователя через функцию get_user_meta( $user_id, 'wptask_phone', true ).
Реализация подтверждения email с помощью плагина и кода
Подтверждение email — одна из наиболее востребованных функций, которая не встроена по умолчанию в WordPress. Рассмотрим два способа её реализации.
Использование плагина Email Verification / Email Confirmation
Плагин Email Verification for WordPress позволяет автоматически отправлять письма с подтверждением после регистрации и блокировать аккаунты до подтверждения.
Особенности:
- Автоматическая генерация и отправка ссылок подтверждения
- Блокировка доступа до подтверждения
- Совместимость с большинством плагинов регистрации
Для установки достаточно скачать с репозитория WordPress, активировать и настроить шаблоны письма.
Реализация подтверждения email вручную
Если нужен кастомный функционал, можно реализовать подтверждение email собственноручно с помощью кода. Пример алгоритма:
- При регистрации генерируем уникальный токен и сохраняем его в метаданных пользователя вместе с меткой «неподтверждён»
- Отправляем письмо с ссылкой, содержащей токен
- По переходу по ссылке проверяем токен, меняем статус на «подтверждён»
Пример генерации токена и сохранения:
function wptask_user_register_send_confirmation( $user_id ) {
$token = bin2hex( random_bytes(16) );
update_user_meta( $user_id, 'wptask_email_confirm_token', $token );
update_user_meta( $user_id, 'wptask_email_confirmed', 0 );
$user_info = get_userdata( $user_id );
$confirm_link = add_query_arg( array(
'wptask_confirm_email' => $token,
'user' => $user_id
), home_url() );
$subject = 'Подтвердите ваш email на сайте ' . get_bloginfo( 'name' );
$message = "Здравствуйте, {$user_info->user_login}!\n\nДля подтверждения email перейдите по ссылке:\n$confirm_link";
wp_mail( $user_info->user_email, $subject, $message );
}
add_action( 'user_register', 'wptask_user_register_send_confirmation' );Обработка перехода по ссылке и подтверждение email:
function wptask_confirm_email() {
if ( isset( $_GET['wptask_confirm_email'], $_GET['user'] ) ) {
$user_id = intval( $_GET['user'] );
$token = sanitize_text_field( $_GET['wptask_confirm_email'] );
$saved_token = get_user_meta( $user_id, 'wptask_email_confirm_token', true );
if ( $token === $saved_token ) {
update_user_meta( $user_id, 'wptask_email_confirmed', 1 );
delete_user_meta( $user_id, 'wptask_email_confirm_token' );
wp_die( 'Email успешно подтверждён. Теперь вы можете войти на сайт.' );
} else {
wp_die( 'Неверный токен подтверждения.' );
}
}
}
add_action( 'init', 'wptask_confirm_email' );Чтобы ограничить вход на сайт для неподтверждённых пользователей, можно использовать фильтр authenticate и проверять мета-поле wptask_email_confirmed.
Дополнительные рекомендации и плагины
Если вы хотите расширить функционал регистрации без программирования, обратите внимание на плагины:
- Clearfy Pro — оптимизация и безопасность, включая расширенные настройки регистрации
- WPRemark — кастомизация форм и комментариев
Оба плагина помогут настроить формы регистрации под свои задачи без лишнего кода.
Выводы по теме
Добавление пользовательских полей и подтверждение email — важные шаги для повышения качества регистрации пользователей на WordPress сайте. Эти задачи можно решить как с помощью плагинов, так и собственными силами, написав небольшой код. Главное — правильно организовать валидацию, сохранение данных и уведомления, чтобы не создавать проблем для конечного пользователя.