В стандартной форме регистрации WordPress отсутствует поле для ввода номера телефона, а подтверждение пользователя по телефону — это важный механизм повышения безопасности и качества аудитории сайта. В этой статье мы подробно рассмотрим, как добавить поле телефона в форму регистрации WordPress и реализовать подтверждение номера через SMS с помощью PHP и сторонних сервисов.
Почему важно добавить поле телефона и подтверждение SMS
Телефонный номер позволяет не только расширить контактные данные пользователя, но и повысить безопасность сайта. Подтверждение по SMS снижает риск регистрации ботов и фейковых аккаунтов, защищает личные данные и упрощает восстановление доступа.
Кроме того, телефон становится дополнительным каналом коммуникации для маркетинга и поддержки. Важно сделать процесс регистрации удобным и надежным.
Как добавить поле телефона в форму регистрации WordPress
Для начала нужно расширить форму регистрации, добавив новое поле. Это делается с помощью хуков WordPress:
function wpkit_add_phone_field() {
?>
<p>
<label for="phone">Телефон (обязательно)</label><br>
<input type="text" name="phone" id="phone" class="input" value="<?php echo esc_attr( wp_unslash( $_POST['phone'] ?? '' ) ); ?>" size="25" />
</p>
<?php
}
add_action( 'register_form', 'wpkit_add_phone_field' );Этот код добавит поле «Телефон» на страницу регистрации. Обратите внимание, что мы сразу выводим введённое значение обратно, чтобы при ошибке пользователь не потерял введённые данные.
Проверка и валидация поля телефона
Важно валидировать номер телефона при регистрации, чтобы не допустить пустых или некорректных значений. Для этого используем хук registration_errors:
function wpkit_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> Пожалуйста, введите корректный номер телефона в международном формате.' );
}
return $errors;
}
add_filter( 'registration_errors', 'wpkit_validate_phone_field', 10, 3 );Здесь регулярное выражение проверяет, что номер состоит из 10–15 цифр и может начинаться с плюса. Вы можете адаптировать паттерн под нужный формат телефона.
Сохранение телефона в мета пользователя
Чтобы сохранить номер телефона, добавим обработчик на событие user_register:
function wpkit_save_phone_field( $user_id ) {
if ( ! empty( $_POST['phone'] ) ) {
update_user_meta( $user_id, 'phone', sanitize_text_field( $_POST['phone'] ) );
}
}
add_action( 'user_register', 'wpkit_save_phone_field' );Теперь номер будет храниться в мета данных пользователя под ключом phone.
Реализация подтверждения телефона через SMS
Для подтверждения телефона понадобится интеграция с SMS-сервисом, например, Twilio, SMS.ru или другой. В этой статье рассмотрим пример с SMS.ru, так как он популярен в России и имеет простой API.
Регистрация и получение API-ключа SMS.ru
Зарегистрируйтесь на https://sms.ru/ и получите API-ключ для отправки сообщений. В дальнейшем используйте этот ключ в запросах.
Отправка кода подтверждения при регистрации
При отправке формы регистрации с телефоном нужно сгенерировать одноразовый код и отправить его на телефон пользователя:
function wpkit_send_sms_confirmation_code( $user_id ) {
$phone = get_user_meta( $user_id, 'phone', true );
if ( ! $phone ) return;
$code = rand( 100000, 999999 );
update_user_meta( $user_id, 'phone_confirmation_code', $code );
update_user_meta( $user_id, 'phone_confirmed', 0 );
$api_key = 'ВАШ_API_КЛЮЧ_SMSRU';
$message = "Ваш код подтверждения на сайте: $code";
$url = "https://sms.ru/sms/send?api_id=$api_key&to=" . urlencode( $phone ) . "&msg=" . urlencode( $message ) . "&json=1";
wp_remote_get( $url );
}
add_action( 'user_register', 'wpkit_send_sms_confirmation_code' );Этот код автоматически отправит SMS с кодом подтверждения после регистрации.
Создание формы ввода кода подтверждения
Пользователю нужно будет ввести код подтверждения, чтобы активировать номер. Добавим страницу с формой:
function wpkit_phone_confirmation_form() {
if ( ! is_user_logged_in() ) {
echo '<p>Пожалуйста, войдите для подтверждения телефона.</p>';
return;
}
if ( isset( $_POST['wpkit_confirm_code'] ) ) {
$user_id = get_current_user_id();
$saved_code = get_user_meta( $user_id, 'phone_confirmation_code', true );
$input_code = sanitize_text_field( $_POST['wpkit_confirm_code'] );
if ( $input_code === $saved_code ) {
update_user_meta( $user_id, 'phone_confirmed', 1 );
delete_user_meta( $user_id, 'phone_confirmation_code' );
echo '<p>Телефон успешно подтверждён!</p>';
} else {
echo '<p style="color:red;">Неверный код подтверждения.</p>';
}
}
?>
<form method="post">
<label for="wpkit_confirm_code">Введите код подтверждения</label><br>
<input type="text" name="wpkit_confirm_code" id="wpkit_confirm_code" required /><br>
<input type="submit" value="Подтвердить" />
</form>
<?php
}
// Для вывода формы можно использовать шорткод
add_shortcode( 'wpkit_phone_confirm', 'wpkit_phone_confirmation_form' );Добавьте на страницу шорткод [wpkit_phone_confirm], чтобы пользователь мог ввести код и подтвердить номер.
Проверка подтверждения телефона при авторизации
Чтобы запретить вход пользователям с неподтверждённым телефоном, используйте хук authenticate:
function wpkit_check_phone_confirmation_on_login( $user, $username, $password ) {
if ( is_wp_error( $user ) || ! $user ) {
return $user;
}
$phone_confirmed = get_user_meta( $user->ID, 'phone_confirmed', true );
if ( ! $phone_confirmed ) {
return new WP_Error( 'phone_not_confirmed', '<strong>Ошибка:</strong> Ваш телефон не подтверждён. Пожалуйста, подтвердите номер.' );
}
return $user;
}
add_filter( 'authenticate', 'wpkit_check_phone_confirmation_on_login', 30, 3 );Так пользователь без подтверждённого телефона не сможет войти, пока не подтвердит номер через форму, описанную выше.
Советы по безопасности и удобству
- Храните коды подтверждения в базе с ограничением по времени (например, удаляйте через 15 минут), чтобы снизить риск утечки.
- Используйте безопасное подключение (HTTPS) для всех страниц с регистрацией и подтверждением.
- Реализуйте повторную отправку кода с ограничением по времени, чтобы избежать спама.
- Показывайте пользователю подсказки по формату номера телефона и подтверждению.
Заключение
Добавление поля телефона в форму регистрации WordPress с подтверждением по SMS — отличное решение для повышения безопасности и качества пользователей на сайте. Реализовать это можно с помощью стандартных хуков WordPress и интеграции с SMS-сервисом. Приведённые примеры кода легко адаптируются под конкретные задачи и сервисы.
Если вы используете плагин Expert Review, можно дополнительно анализировать качество регистраций и поведение пользователей, чтобы повысить безопасность.