Как добавить новое поле в форму регистрации WordPress с примером кода

В стандартной форме регистрации WordPress отсутствуют дополнительные поля, которые могут понадобиться для сбора дополнительной информации о пользователях. Например, вы можете захотеть добавить поле "Номер телефона", "Компания" или "Возраст". В этой статье мы подробно рассмотрим, как добавить новое поле в форму регистрации, как валидировать введённые данные и как сохранить их в базе данных WordPress.

Почему стоит добавить новое поле в форму регистрации WordPress

По умолчанию форма регистрации WordPress содержит только базовые поля: имя пользователя, адрес электронной почты и пароль. Однако для многих сайтов этого недостаточно. Например, если вы ведёте сообщество с дополнительными требованиями к пользователям, или хотите сегментировать аудиторию по дополнительным признакам — это невозможно без расширения формы регистрации.

Добавление собственного поля позволяет собирать необходимые данные сразу при регистрации, что упрощает дальнейшую работу с пользователями и улучшает взаимодействие.

Как добавить поле в форму регистрации — поэтапный разбор

Добавление поля с помощью хука register_form

Для вывода нового поля в форме регистрации используется хук register_form. Ниже пример функции wpdo_add_custom_registration_field, которая добавляет поле "Номер телефона":

function wpdo_add_custom_registration_field() {
    $phone = ( isset( $_POST['wpdo_phone'] ) ) ? sanitize_text_field( $_POST['wpdo_phone'] ) : '';
    echo '<p>'
        .'<label for="wpdo_phone">Номер телефона<br/>'
        .'<input type="text" name="wpdo_phone" id="wpdo_phone" class="input" value="'. esc_attr( $phone ) .'" size="25" />'
        .'</label>'
        .'</p>';
}

Эта функция выводит простой текстовый инпут. Обратите внимание, что мы сразу получаем значение из $_POST, чтобы поле сохраняло введённые данные при ошибках валидации.

Валидация поля с помощью хука registration_errors

Чтобы гарантировать корректность введённых данных, необходимо реализовать проверку. Для этого используем хук registration_errors:

function wpdo_validate_custom_registration_field( $errors, $sanitized_user_login, $user_email ) {
    if ( empty( $_POST['wpdo_phone'] ) || ! preg_match( '/^\+?[0-9\s\-]{7,15}$/', $_POST['wpdo_phone'] ) ) {
        $errors->add( 'wpdo_phone_error', '<strong>Ошибка</strong>: Пожалуйста, введите корректный номер телефона.' );
    }
    return $errors;
}

Здесь мы проверяем, что поле не пустое и соответствует простому регулярному выражению для телефонного номера. Вы можете изменить регулярное выражение под свои требования.

Сохранение данных в мета-поле пользователя с помощью хука user_register

После успешной регистрации нам нужно сохранить данные в базе. Добавим функцию для сохранения:

function wpdo_save_custom_registration_field( $user_id ) {
    if ( ! empty( $_POST['wpdo_phone'] ) ) {
        update_user_meta( $user_id, 'wpdo_phone', sanitize_text_field( $_POST['wpdo_phone'] ) );
    }
}

Эта функция обновляет мета-данные пользователя, где ключом выступает wpdo_phone.

Как вывести добавленное поле в профиле пользователя

Чтобы администраторы и сами пользователи могли видеть и изменять поле "Номер телефона" в админке, добавим его в профиль WordPress.

Отображение поля в профиле через хуки show_user_profile и edit_user_profile

function wpdo_show_phone_field_in_profile( $user ) {
    $phone = get_user_meta( $user->ID, 'wpdo_phone', true );
    echo '<h3>Дополнительная информация WPDO</h3>';
    echo '<table class="form-table"><tr>'
        .'<th><label for="wpdo_phone">Номер телефона</label></th>'
        .'<td><input type="text" name="wpdo_phone" id="wpdo_phone" value="'. esc_attr( $phone ) .'" class="regular-text" /></td>'
        .'</tr></table>';
}

Эту функцию необходимо повесить на хуки show_user_profile и edit_user_profile.

Сохранение изменений поля в профиле

function wpdo_save_phone_field_in_profile( $user_id ) {
    if ( ! current_user_can( 'edit_user', $user_id ) ) {
        return false;
    }
    if ( isset( $_POST['wpdo_phone'] ) ) {
        update_user_meta( $user_id, 'wpdo_phone', sanitize_text_field( $_POST['wpdo_phone'] ) );
    }
}

Эту функцию подключаем к хукам personal_options_update и edit_user_profile_update для сохранения данных.

Используемые плагины для расширения регистрации

Хотя добавление полей вручную — гибкий и удобный способ, существует ряд плагинов, которые позволяют расширять форму регистрации без написания кода:

  • User Registration — удобный конструктор форм с поддержкой множества полей.
  • Profile Builder — плагин с богатым функционалом для кастомизации профилей и регистрации.
  • Ultimate Member — мощное решение для создания сообществ с расширенной регистрацией и профилями.

Использование плагинов оправдано, если вы хотите быстро внедрить расширенную регистрацию без глубокого погружения в код.

Советы и рекомендации по безопасности

При добавлении кастомных полей обязательно выполняйте санитизацию и валидацию данных, чтобы избежать XSS и других уязвимостей. Используйте функции WordPress для фильтрации ввода, такие как sanitize_text_field или esc_attr.

Также убедитесь, что данные, вводимые пользователями, не раскрывают конфиденциальную информацию и не нарушают правила вашей политики конфиденциальности.

Итоги

Добавление нового поля в форму регистрации WordPress — задача, которую можно решить с помощью трёх основных шагов: вывести поле с помощью register_form, проверить данные через registration_errors и сохранить их с помощью user_register. Для удобства работы с уже зарегистрированными пользователями поле можно добавить в профиль через соответствующие хуки.

Такой подход позволит вам гибко настраивать регистрацию под задачи вашего сайта, будь то сбор телефонных номеров, дополнительных данных или создание уникальных профилей.

Как добавить новое поле в форму регистрации WordPress с примером кода
03.12.2025
Как настроить отложенный запуск Cron в WordPress без плагинов
12.01.2026
Как создать shortcode в WordPress для вывода данных
09.11.2025
WooCommerce: отладка проблем с оплатой через Stripe после обновления
24.05.2026
WooCommerce: как установить и настроить отложенную оплату
08.05.2026