Зачем добавлять поле телефона в форму регистрации WordPress
Стандартная форма регистрации WordPress содержит только поля для имени пользователя, email и пароля. Но в некоторых случаях полезно расширить её дополнительными данными, например, номером телефона. Это позволяет повысить безопасность, организовать двухфакторную аутентификацию, отправлять важные уведомления и улучшить связь с пользователем.
В этой статье мы разберём, как добавить поле телефона в форму регистрации, проверить корректность введённого номера и реализовать подтверждение через SMS, чтобы убедиться, что номер действительно принадлежит пользователю.
Добавление поля телефона в форму регистрации WordPress
Сначала нужно расширить стандартную форму регистрации и добавить новое поле. Для этого используем фильтр register_form и выводим HTML с полем телефона.
function wpmagazin_add_phone_field() {
$phone = ( isset( $_POST['phone'] ) ) ? sanitize_text_field( $_POST['phone'] ) : '';
echo '<p><label for="phone">Телефон <span style="color: red;">*</span></label><br />';
echo '<input type="text" name="phone" id="phone" class="input" value="' . esc_attr( $phone ) . '" size="25" /></p>';
}
add_action( 'register_form', 'wpmagazin_add_phone_field' );Этот код добавит поле «Телефон» в форму регистрации. Значок «*» показывает, что поле обязательное.
Валидация номера телефона при регистрации
Важно проверить, что пользователь ввёл корректный номер телефона. Для этого используем хук registration_errors. Проверим, что поле заполнено и соответствует простому шаблону для российских номеров (например, 10 цифр без пробелов).
function wpmagazin_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['phone'] ) ) {
$errors->add( 'phone_error', '<strong>ОШИБКА</strong>: Пожалуйста, введите номер телефона.' );
} else {
$phone = sanitize_text_field( $_POST['phone'] );
// Пример простой проверки: только цифры, 10-11 символов
if ( ! preg_match( '/^\+?\d{10,11}$/', $phone ) ) {
$errors->add( 'phone_error', '<strong>ОШИБКА</strong>: Введите корректный номер телефона (только цифры, от 10 до 11 символов).' );
}
}
return $errors;
}
add_filter( 'registration_errors', 'wpmagazin_validate_phone_field', 10, 3 );Этот код не допускает регистрацию без телефона и проверяет формат. В реальном проекте можно усложнить проверку, подключив специализированные библиотеки.
Сохранение номера телефона в пользовательские метаданные
После успешной регистрации нужно сохранить номер телефона в базе данных. Для этого используем хук user_register.
function wpmagazin_save_phone_field( $user_id ) {
if ( ! empty( $_POST['phone'] ) ) {
$phone = sanitize_text_field( $_POST['phone'] );
update_user_meta( $user_id, 'phone', $phone );
}
}
add_action( 'user_register', 'wpmagazin_save_phone_field' );Теперь номер телефона хранится в метаданных пользователя и доступен для дальнейшего использования.
Реализация подтверждения телефона через SMS
Чтобы проверить, что номер действительно принадлежит пользователю, можно реализовать отправку кода подтверждения на указанный телефон. Для этого потребуется интеграция с SMS-сервисом, например, Twilio, Sms.ru или другим.
Общий алгоритм такой:
- Пользователь вводит номер телефона при регистрации.
- После отправки формы на телефон отправляется SMS с кодом подтверждения.
- Пользователь вводит код на сайте для подтверждения номера.
- Если код совпадает, номер считается подтверждённым.
Ниже пример функции отправки SMS через Sms.ru (требуется зарегистрироваться и получить API-ключ):
function wpmagazin_send_sms( $phone, $message ) {
$api_id = 'ВАШ_API_КЛЮЧ_SMSRU';
$url = 'https://sms.ru/sms/send?api_id=' . urlencode($api_id) . '&to=' . urlencode($phone) . '&msg=' . urlencode($message) . '&json=1';
$response = wp_remote_get( $url );
if ( is_wp_error( $response ) ) {
return false;
}
$body = json_decode( wp_remote_retrieve_body( $response ), true );
return ( isset( $body['status'] ) && $body['status'] == 'OK' );
}Примерный workflow подтверждения:
- При регистрации генерируем случайный код, например, 6 цифр и сохраняем в сессии или базе.
- Отправляем SMS с этим кодом на номер пользователя.
- Показываем форму ввода кода на отдельной странице.
- Проверяем введённый код с сохранённым и активируем подтверждение.
Пример генерации и сохранения кода
function wpmagazin_generate_confirmation_code() {
return rand(100000, 999999);
}
// При регистрации
add_action( 'user_register', function( $user_id ) {
if ( ! empty( $_POST['phone'] ) ) {
$phone = sanitize_text_field( $_POST['phone'] );
$code = wpmagazin_generate_confirmation_code();
update_user_meta( $user_id, 'phone_confirmation_code', $code );
update_user_meta( $user_id, 'phone_confirmed', 0 );
wpmagazin_send_sms( $phone, 'Ваш код подтверждения: ' . $code );
}
});Проверка кода подтверждения
Создайте отдельную страницу с формой ввода кода, обработчик которой сравнивает введённое значение с сохранённым в мета пользователя. При совпадении обновляет флаг phone_confirmed на 1.
Использование готовых плагинов для подтверждения телефона
Если не хочется писать код с нуля, можно использовать готовые решения. Например:
- Phone Verification — плагин для подтверждения телефона через SMS с поддержкой WooCommerce и форм регистрации.
- WPGPT — универсальный плагин с AI-интеграцией, который можно настроить для валидации и подтверждения данных.
Такие плагины экономят время и предлагают удобные интерфейсы для настройки.
Выводы и рекомендации
Добавление поля телефона с подтверждением в регистрацию WordPress — эффективный способ повысить безопасность и качество данных пользователей. Важно грамотно реализовать валидацию и интеграцию с SMS-сервисом для надежной проверки.
Если у вас небольшой сайт, начните с простого кода, описанного выше. Для более масштабных проектов лучше использовать проверенные плагины с поддержкой популярных SMS-провайдеров.
Не забывайте о защите данных и соответствии требованиям законодательства при работе с персональными данными.