В стандартной форме регистрации WordPress отсутствует возможность добавлять уникальные поля с валидацией и подтверждением, например, подтверждение номера телефона или дополнительного адреса электронной почты. В этой статье разберём, как расширить стандартную форму регистрации, добавив уникальные поля с проверкой уникальности и подтверждением введённых данных. Для примера реализуем добавление поля «Номер телефона» с подтверждением кода по SMS.
Почему важно использовать уникальные поля с подтверждением
В некоторых проектах, особенно когда WordPress используется как платформа для сообщества, маркетплейса или обучающего портала, важно не только получить данные пользователя, но и проверить их корректность и уникальность. Например, номер телефона может использоваться для двухфакторной аутентификации, рассылок или как идентификатор для поддержки. Без проверки уникальности и подтверждения легко получить дублирование или ошибочные данные.
Добавление такого функционала вручную — задача не из простых, но вполне решаемая с помощью хуков WordPress и сторонних плагинов. В статье рассмотрим именно кастомизированный подход с минимальным количеством сторонних зависимостей.
Добавление нового поля в форму регистрации WordPress
Для начала нам нужно добавить поле ввода «Номер телефона» в стандартную форму регистрации. Сделаем это с помощью хука register_form. Пример функции wpbloger_add_phone_field_register_form:
function wpbloger_add_phone_field_register_form() {
$phone = ( ! empty( $_POST['phone'] ) ) ? sanitize_text_field( wp_unslash( $_POST['phone'] ) ) : '';
?>
<p>
<label for="phone">Номер телефона (уникальный)<br />
<input type="text" name="phone" id="phone" class="input" value="<?php echo esc_attr( $phone ); ?>" size="25" /></label>
</p>
<?php
}
add_action( 'register_form', 'wpbloger_add_phone_field_register_form' );Данная функция добавит поле на страницу регистрации. Обязательно используем sanitize_text_field и esc_attr для безопасности.
Проверка уникальности и валидация поля
Теперь требуется проверить, что введённый номер телефона уникален и соответствует нужному формату. Для этого воспользуемся хуком registration_errors. Функция wpbloger_validate_phone_field:
function wpbloger_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['phone'] ) ) {
$errors->add( 'phone_error', '<strong>Ошибка</strong>: Пожалуйста, введите номер телефона.' );
} else {
$phone = sanitize_text_field( wp_unslash( $_POST['phone'] ) );
// Проверка формата (пример: только цифры и длина 10-15)
if ( ! preg_match( '/^\d{10,15}$/', $phone ) ) {
$errors->add( 'phone_error', '<strong>Ошибка</strong>: Неверный формат номера телефона.' );
} else {
// Проверяем уникальность
$user_query = new WP_User_Query( array(
'meta_key' => 'phone',
'meta_value' => $phone,
'number' => 1,
'count_total' => false,
) );
if ( ! empty( $user_query->results ) ) {
$errors->add( 'phone_error', '<strong>Ошибка</strong>: Этот номер телефона уже зарегистрирован.' );
}
}
}
return $errors;
}
add_filter( 'registration_errors', 'wpbloger_validate_phone_field', 10, 3 );Таким образом, мы убедимся, что телефон введён корректно и ещё не используется другим пользователем.
Сохраняем поле в профиль пользователя
После успешной регистрации нужно сохранить номер телефона в метаданные пользователя. Сделаем это через хук user_register в функции wpbloger_save_phone_user_meta:
function wpbloger_save_phone_user_meta( $user_id ) {
if ( ! empty( $_POST['phone'] ) ) {
$phone = sanitize_text_field( wp_unslash( $_POST['phone'] ) );
update_user_meta( $user_id, 'phone', $phone );
}
}
add_action( 'user_register', 'wpbloger_save_phone_user_meta' );Добавление подтверждения номера телефона через SMS
Для подтверждения номера телефона можно использовать сторонние API SMS-рассылок, например, Twilio, SMS.ru, или отечественные аналоги. Логика такая:
- После отправки формы регистрации создать временную запись с кодом подтверждения и номером телефона.
- Отправить пользователю SMS с кодом.
- Предоставить страницу или форму ввода кода подтверждения.
- При успешном вводе активировать учётную запись или подтвердить номер.
Рассмотрим базовый пример отправки кода и проверки:
Отправка кода и сохранение во временную опцию
function wpbloger_send_phone_confirmation_code( $user_id ) {
$phone = get_user_meta( $user_id, 'phone', true );
if ( ! $phone ) {
return;
}
$code = wp_rand( 100000, 999999 );
update_user_meta( $user_id, 'phone_confirmation_code', $code );
update_user_meta( $user_id, 'phone_confirmed', 0 );
// Здесь вызываем API SMS
// Пример для SMS.ru (заменить на реальный вызов):
// wpbloger_send_sms( $phone, "Ваш код подтверждения: $code" );
}
add_action( 'user_register', 'wpbloger_send_phone_confirmation_code' );Проверка кода подтверждения
Создайте на сайте страницу с формой для ввода кода подтверждения. При отправке формы проверяйте код:
function wpbloger_check_phone_confirmation_code( $user_id, $input_code ) {
$saved_code = get_user_meta( $user_id, 'phone_confirmation_code', true );
if ( $saved_code && $saved_code === $input_code ) {
update_user_meta( $user_id, 'phone_confirmed', 1 );
delete_user_meta( $user_id, 'phone_confirmation_code' );
return true;
}
return false;
}Осталось реализовать UI и обработчики, а также интеграцию с выбранным SMS-шлюзом. Это позволит обеспечить дополнительный уровень безопасности и качества данных.
Использование плагина WPGPT для генерации кастомных сообщений
Для автоматизации создания сообщений и шаблонов SMS можно использовать плагин WPGPT. Он поможет создавать уникальные и грамотно сформулированные тексты для подтверждения, уведомлений и прочих коммуникаций с пользователями.
Итоги и рекомендации
Добавление уникальных полей с подтверждением в формы регистрации WordPress — важная задача для повышения качества пользовательских данных и безопасности. В статье мы рассмотрели, как добавить поле «Номер телефона», проверить его уникальность, сохранить в профиле и реализовать базовую логику подтверждения через SMS с кодом.
Для полноценного внедрения потребуется доработка интерфейса подтверждения и интеграция с SMS-шлюзом. Также рекомендуем внимательно протестировать все этапы регистрации и валидации.
Если хотите более мощное управление регистрацией и полями, обратите внимание на плагины типа Expert Review или Clearfy Pro, которые позволяют расширять возможности регистрации и управления пользователями без глубокого кодинга.