Часто при создании сайта на WordPress возникает задача расширить стандартную форму регистрации, добавив дополнительные поля, например, для сбора номера телефона, даты рождения или других пользовательских данных. В этой статье подробно разберём, как добавить дополнительное поле в форму регистрации WordPress через код, а также сохранить и отобразить эти данные в профиле пользователя.
Почему стоит добавлять поля регистрации через код
Хотя существуют плагины для расширения формы регистрации, например, User Registration или WP User Manager, использование кода даёт максимум гибкости и контроля над процессом. Вы сможете точно настроить валидацию, хранение и отображение данных без лишних зависимостей.
Кроме того, добавляя поле вручную, вы не нагружаете сайт дополнительными плагинами, что положительно сказывается на производительности и безопасности.
Добавляем новое поле в форму регистрации WordPress
Для начала нам нужно вывести дополнительное поле в форме регистрации. Сделаем это с помощью хука register_form.
function wpload_add_custom_registration_field() {
$phone = ( ! empty( $_POST['wpload_phone'] ) ) ? sanitize_text_field( $_POST['wpload_phone'] ) : '';
?>
<p>
<label for="wpload_phone">Номер телефона<br />
<input type="text" name="wpload_phone" id="wpload_phone" class="input" value="<?php echo esc_attr( $phone ); ?>" size="25" /></label>
</p>
<?php
}
add_action('register_form', 'wpload_add_custom_registration_field');
В этом коде мы добавляем текстовое поле для ввода номера телефона с уникальным именем wpload_phone. Значение поля при повторной загрузке формы сохраняется.
Валидация дополнительного поля при регистрации
Важно проверить, что пользователь ввёл корректный номер телефона. Для этого применим хук registration_errors, который позволяет добавить свои ошибки в процесс регистрации.
function wpload_validate_custom_registration_field( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['wpload_phone'] ) || ! preg_match( '/^\+?\d{10,15}$/', $_POST['wpload_phone'] ) ) {
$errors->add( 'wpload_phone_error', '<strong>Ошибка</strong>: Введите корректный номер телефона в формате +1234567890' );
}
return $errors;
}
add_filter( 'registration_errors', 'wpload_validate_custom_registration_field', 10, 3 );
Здесь мы проверяем, что поле заполнено и соответствует регулярному выражению для номера телефона с 10-15 цифрами, с возможным плюсом в начале.
Сохраняем дополнительное поле в метаданные пользователя
После прохождения валидации нужно сохранить номер телефона в пользовательских метаданных. Используем для этого хук user_register.
function wpload_save_custom_registration_field( $user_id ) {
if ( ! empty( $_POST['wpload_phone'] ) ) {
update_user_meta( $user_id, 'wpload_phone', sanitize_text_field( $_POST['wpload_phone'] ) );
}
}
add_action( 'user_register', 'wpload_save_custom_registration_field' );
В результате пользователь получит дополнительное поле с номером телефона, сохранённое в базе.
Отображаем дополнительное поле в профиле пользователя в админке
Чтобы администратор мог видеть и редактировать номер телефона, добавим поле в профиль пользователя через хуки show_user_profile и edit_user_profile.
function wpload_show_extra_profile_fields( $user ) { ?>
<h3>Дополнительные данные пользователя</h3>
<table class="form-table">
<tr>
<th><label for="wpload_phone">Номер телефона</label></th>
<td>
<input type="text" name="wpload_phone" id="wpload_phone" value="<?php echo esc_attr( get_user_meta( $user->ID, 'wpload_phone', true ) ); ?>" class="regular-text" /><br />
<span class="description">Введите номер телефона пользователя.</span>
</td>
</tr>
</table>
<?php }
add_action( 'show_user_profile', 'wpload_show_extra_profile_fields' );
add_action( 'edit_user_profile', 'wpload_show_extra_profile_fields' );
function wpload_save_extra_profile_fields( $user_id ) {
if ( ! current_user_can( 'edit_user', $user_id ) ) {
return false;
}
if ( isset( $_POST['wpload_phone'] ) ) {
update_user_meta( $user_id, 'wpload_phone', sanitize_text_field( $_POST['wpload_phone'] ) );
}
}
add_action( 'personal_options_update', 'wpload_save_extra_profile_fields' );
add_action( 'edit_user_profile_update', 'wpload_save_extra_profile_fields' );
Теперь номер телефона можно просматривать и изменять в профиле пользователя через админку.
Используем дополнительное поле в шаблонах сайта
Чтобы вывести номер телефона пользователя на сайте, например, на странице профиля, используйте функцию:
function wpload_get_user_phone( $user_id ) {
return get_user_meta( $user_id, 'wpload_phone', true );
}
Пример вывода в шаблоне:
$phone = wpload_get_user_phone( get_current_user_id() );
if ( $phone ) {
echo '<p>Ваш номер телефона: ' . esc_html( $phone ) . '</p>';
}
Плагины для расширенной регистрации и зачем они могут пригодиться
Если вы хотите более сложные формы с условными полями, интеграциями и визуальными конструкторами, рассмотрите плагины:
- WPGPT — с AI-поддержкой для создания форм и автоматизации
- Clearfy Pro — для оптимизации и расширения функционала WordPress
- WPRemark — для улучшенного управления пользователями и комментариями
Но если задача — добавить одно-два поля, то проще и эффективнее использовать кастомный код, как описано выше.
Подводим итоги и рекомендации
Добавление дополнительных полей в форму регистрации WordPress через код — это безопасный и гибкий способ собрать нужные данные от пользователей, не прибегая к тяжелым плагинам. Вы контролируете валидацию, хранение и отображение данных, легко интегрируете это в свою тему или плагин.
Обязательно следите за безопасностью: фильтруйте и экранируйте все данные, проверяйте права доступа при редактировании.
Используйте описанные хуки и функции с префиксом wpload_, чтобы избежать конфликтов с другими плагинами.
Если хотите расширить функционал регистрации, рекомендуем изучить плагины с продвинутыми возможностями, но для большинства задач достаточно приведённого кода.