Как добавить новое поле в форму регистрации 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. Для удобства работы с уже зарегистрированными пользователями поле можно добавить в профиль через соответствующие хуки.

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

Как отключить дубли архивов tag, author и date в WordPress без поломки индексации
28.08.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше