В стандартной форме регистрации WordPress отсутствует поле для ввода номера телефона. Однако во многих случаях необходимо собирать телефоны пользователей, например, для SMS-уведомлений или подтверждения личности. В этой статье разберём, как добавить кастомное поле "Телефон" в форму регистрации, а также реализовать проверку и подтверждение номера телефона с помощью кода и популярных плагинов.
Почему важно добавлять и подтверждать номер телефона при регистрации
Телефон — это дополнительный способ связи с пользователем, который значительно повышает безопасность и доверие к сайту. Подтверждение номера позволяет убедиться, что пользователь ввёл корректные данные, а также помогает бороться с регистрациями ботов и спамом.
Кроме того, наличие номера телефона открывает возможности для рассылки SMS-уведомлений, двухфакторной аутентификации и персонализации сервиса.
Добавление поля телефона в форму регистрации WordPress
Для начала добавим поле "Телефон" в стандартную форму регистрации WordPress. Для этого используем хук register_form, который позволяет выводить дополнительные поля на странице регистрации.
add_action('register_form', 'wpbloger_add_phone_field');
function wpbloger_add_phone_field() {
$phone = ( ! empty( $_POST['phone'] ) ) ? sanitize_text_field( $_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
}
Этот код добавит новое поле на страницу регистрации. Пользователь сможет ввести свой номер телефона.
Валидация и сохранение номера телефона
После добавления поля необходимо проверить корректность введённого телефона и сохранить его в метаданные пользователя. Для валидации используем хук registration_errors, а для сохранения — user_register.
add_filter('registration_errors', 'wpbloger_validate_phone_field', 10, 3);
function wpbloger_validate_phone_field($errors, $sanitized_user_login, $user_email) {
if ( empty( $_POST['phone'] ) || ! preg_match('/^\+?\d{10,15}$/', $_POST['phone']) ) {
$errors->add('phone_error', '<strong>Ошибка</strong>: Введите корректный номер телефона в международном формате, например +79161234567.');
}
return $errors;
}
add_action('user_register', 'wpbloger_save_phone_field');
function wpbloger_save_phone_field($user_id) {
if ( ! empty( $_POST['phone'] ) ) {
update_user_meta($user_id, 'phone', sanitize_text_field($_POST['phone']));
}
}
Регулярное выражение проверяет, что номер состоит из 10–15 цифр и может начинаться с плюса. Это стандартный формат для международных номеров.
Реализация подтверждения номера телефона через SMS
Самая сложная часть — подтвердить, что пользователь действительно владеет указанным номером. Для этого можно использовать сторонние SMS-сервисы, например, Twilio, SMS.ru или другие.
Общая логика такая:
- При регистрации генерируется одноразовый код.
- Код отправляется на введённый номер через SMS.
- Пользователь вводит код на сайте для подтверждения.
- Если код совпадает, номер считается подтверждённым.
Ниже пример упрощённой реализации с использованием сессии и виртуального SMS (без реальной отправки) для демонстрации логики.
session_start();
// Генерация и "отправка" кода при регистрации
add_action('user_register', 'wpbloger_send_sms_code');
function wpbloger_send_sms_code($user_id) {
$phone = get_user_meta($user_id, 'phone', true);
if (!$phone) return;
// Генерируем 6-значный код
$code = rand(100000, 999999);
// Сохраняем код в сессии для примера (в реальном случае нужно в базе)
$_SESSION['phone_verification_code'] = $code;
$_SESSION['phone_to_verify'] = $phone;
$_SESSION['user_id_to_verify'] = $user_id;
// Отправка SMS (здесь только эмуляция)
error_log("Отправлен код $code на номер $phone");
}
// Проверка кода подтверждения (пример обработчика формы)
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['phone_verification_code'])) {
if ($_POST['phone_verification_code'] == $_SESSION['phone_verification_code']) {
update_user_meta($_SESSION['user_id_to_verify'], 'phone_verified', 1);
echo 'Номер телефона успешно подтверждён!';
// Очистка сессии
unset($_SESSION['phone_verification_code'], $_SESSION['phone_to_verify'], $_SESSION['user_id_to_verify']);
} else {
echo 'Неверный код подтверждения.';
}
}
Разумеется, для полноценной реализации потребуется интеграция с выбранным SMS-провайдером. Ссылку на API и примеры можно найти на сайтах провайдеров.
Использование плагинов для подтверждения телефона в WordPress
Если хочется ускорить процесс без программирования, можно использовать готовые решения:
- Clearfy Pro — среди множества функций есть инструменты для добавления и настройки дополнительных полей регистрации, включая телефоны с валидацией.
- WPCommunity — плагин с поддержкой кастомных полей, в том числе для телефонов и подтверждения их через SMS, удобен для сайтов с сообществами.
- Плагины авторизации через SMS, например "SMS Verification" или "WP SMS Verification" (не на wpshop.ru, но популярны в репозитории WordPress).
Для интеграции с этими решениями достаточно установить плагин, настроить параметры и при необходимости добавить кастомный код для интеграции с вашим функционалом.
Вывод: что учитывать при добавлении поля телефона и подтверждении
Добавление поля телефона требует продуманной валидации, удобного UX и защиты от злоупотреблений. Подтверждение телефона через SMS — эффективный способ повысить качество базы пользователей, но требует подключения к внешним сервисам и затрат.
Рекомендуется:
- Использовать международный формат номера для универсальности.
- Обеспечивать защиту от повторных запросов кода (лимиты по времени).
- Хранить подтверждённый статус в метаданных пользователя.
- Предусмотреть возможность восстановления или изменения телефона с повторным подтверждением.
Таким образом, вы сможете расширить возможности регистрации и повысить безопасность и качество пользовательских данных на вашем сайте WordPress.