Зачем добавлять поле телефона в форму регистрации WordPress
Стандартная форма регистрации WordPress содержит только базовые поля: имя пользователя, email и пароль. Однако во многих случаях сайтам нужно собирать дополнительную информацию о пользователях, например, номер телефона для оперативной связи, подтверждения через SMS или маркетинговых рассылок.
Добавление поля телефона позволяет расширить возможности взаимодействия с пользователями, улучшить поддержку и повысить доверие. В этой статье мы разберём, как добавить поле телефона в форму регистрации WordPress, сохранить его в базе данных и вывести в профиле пользователя.
Реализация будет через стандартные хуки WordPress, без сторонних плагинов, но в конце расскажем, на какие плагины стоит обратить внимание, если нужен более гибкий функционал.
Добавление поля телефона на страницу регистрации WordPress
Для добавления нового поля мы воспользуемся хуком register_form, который позволяет вывести дополнительный HTML в форму регистрации.
Добавим следующий код в файл functions.php вашей активной темы или в собственный плагин:
function wpdownload_add_phone_field() {
$phone = ( isset( $_POST['wpdownload_phone'] ) ) ? sanitize_text_field( $_POST['wpdownload_phone'] ) : '';
?>
<p>
<label for="wpdownload_phone">Телефон <span class="required">*</span></label><br/>
<input type="text" name="wpdownload_phone" id="wpdownload_phone" class="input" value="<?php echo esc_attr( $phone ); ?>" size="25" />
</p>
<?php
}
add_action( 'register_form', 'wpdownload_add_phone_field' );Этот код выведет текстовое поле с подписью «Телефон» и сделает его обязательным для заполнения. Следующий шаг — проверить, что пользователь действительно заполнил это поле.
Валидация поля телефона при регистрации
Чтобы не допустить пустое или некорректное значение, используем фильтр registration_errors. В нем проверим, что поле «Телефон» присутствует и корректно заполнено.
function wpdownload_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['wpdownload_phone'] ) ) {
$errors->add( 'wpdownload_phone_error', '<strong>Ошибка</strong>: Пожалуйста, введите номер телефона.' );
} else {
$phone = sanitize_text_field( $_POST['wpdownload_phone'] );
if ( ! preg_match( '/^\+?[0-9\s\-\(\)]+$/', $phone ) ) {
$errors->add( 'wpdownload_phone_error', '<strong>Ошибка</strong>: Неверный формат номера телефона.' );
}
}
return $errors;
}
add_filter( 'registration_errors', 'wpdownload_validate_phone_field', 10, 3 );Здесь мы проверяем, что поле не пустое и номер телефона содержит только цифры, пробелы, дефисы, скобки и необязательный знак «+» в начале. При ошибке выводится сообщение, которое увидит пользователь.
Сохранение номера телефона в пользовательских метаданных
Чтобы сохранить телефон, воспользуемся действием user_register. В этой функции мы возьмём значение из формы и запишем в мета-поле пользователя.
function wpdownload_save_phone_field( $user_id ) {
if ( ! empty( $_POST['wpdownload_phone'] ) ) {
update_user_meta( $user_id, 'wpdownload_phone', sanitize_text_field( $_POST['wpdownload_phone'] ) );
}
}
add_action( 'user_register', 'wpdownload_save_phone_field' );Теперь номер телефона сохраняется в базе и доступен в метаданных пользователя с ключом wpdownload_phone.
Отображение и редактирование номера телефона в профиле пользователя
Часто требуется, чтобы пользователь мог видеть и менять свой номер телефона через профиль в админке или в личном кабинете. Добавим поле в профиль администратора и пользователя.
Для этого используем хуки show_user_profile и edit_user_profile:
function wpdownload_show_phone_profile_field( $user ) {
$phone = get_user_meta( $user->ID, 'wpdownload_phone', true );
?>
<h3>Дополнительная информация</h3>
<table class="form-table">
<tr>
<th><label for="wpdownload_phone">Телефон</label></th>
<td>
<input type="text" name="wpdownload_phone" id="wpdownload_phone" value="<?php echo esc_attr( $phone ); ?>" class="regular-text" />
<br /><span class="description">Введите номер телефона пользователя.</span>
</td>
</tr>
</table>
<?php
}
add_action( 'show_user_profile', 'wpdownload_show_phone_profile_field' );
add_action( 'edit_user_profile', 'wpdownload_show_phone_profile_field' );И сохраняем изменения при обновлении профиля с помощью personal_options_update и edit_user_profile_update:
function wpdownload_save_phone_profile_field( $user_id ) {
if ( current_user_can( 'edit_user', $user_id ) ) {
if ( ! empty( $_POST['wpdownload_phone'] ) ) {
update_user_meta( $user_id, 'wpdownload_phone', sanitize_text_field( $_POST['wpdownload_phone'] ) );
} else {
delete_user_meta( $user_id, 'wpdownload_phone' );
}
}
}
add_action( 'personal_options_update', 'wpdownload_save_phone_profile_field' );
add_action( 'edit_user_profile_update', 'wpdownload_save_phone_profile_field' );Используем плагины для расширения функционала поля телефона
Если хочется более удобного решения, без ручного кода, можно использовать плагины, например:
- User Registration – Custom Registration Form, Login and User Profile for WordPress – позволяет создавать кастомные формы регистрации с любыми полями, в том числе телефона.
- Profile Builder – мощный плагин для добавления и редактирования пользовательских полей и управления профилями.
- Advanced Custom Fields (ACF) – с помощью него можно добавить поле телефона и вывести его в шаблонах.
Но если нужен легкий и прозрачный код без лишних зависимостей, лучше использовать собственные решения, как в нашем примере.
Резюме и рекомендации по безопасности
При работе с пользовательскими данными важно:
- Всегда применять функции очистки и фильтрации данных, например,
sanitize_text_field(). - Проверять корректность введённых данных с помощью регулярных выражений.
- Обеспечивать корректное отображение и защиту от XSS через
esc_attr()и подобные функции. - Использовать nonce-поля для защиты форм, если добавляете их на фронтенде.
Таким образом, добавление поля телефона в регистрацию WordPress — задача вполне выполнимая и полезная. Приведённый код можно расширять, например, добавлять валидацию через AJAX, интегрировать с SMS-сервисами, показывать в личном кабинете и т.д.