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

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

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

Стандартная форма регистрации содержит минимум полей: имя пользователя, email и пароль. Но для многих проектов необходимо собирать дополнительную информацию — например, номер телефона, дату рождения, согласие с условиями или персональные настройки.

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

В этой статье мы добавим поле «Телефон» в форму регистрации, проверим его на корректность, сохраним в метаданных пользователя и выведем в админке.

Добавление поля «Телефон» в форму регистрации WordPress

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

function wptemplates_add_phone_field() {
    $phone = ( ! empty( $_POST['phone'] ) ) ? sanitize_text_field( $_POST['phone'] ) : '';
    echo '<p>';
    echo '<label for="phone">Телефон <span class="required">*</span></label><br/>';
    echo '<input type="text" name="phone" id="phone" class="input" value="' . esc_attr( $phone ) . '" size="25" />';
    echo '</p>';
}
add_action( 'register_form', 'wptemplates_add_phone_field' );

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

Валидация и проверка введённых данных

Важно проверить, что пользователь ввёл корректный номер телефона и не оставил поле пустым. Для этого используем хук registration_errors и функцию wptemplates_validate_phone_field:

function wptemplates_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
    if ( empty( $_POST['phone'] ) ) {
        $errors->add( 'phone_error', '<strong>ОШИБКА</strong>: Пожалуйста, введите номер телефона.' );
    } else {
        $phone = sanitize_text_field( $_POST['phone'] );
        if ( ! preg_match( '/^\+?[0-9]{10,15}$/', $phone ) ) {
            $errors->add( 'phone_error_format', '<strong>ОШИБКА</strong>: Неверный формат номера телефона.' );
        }
    }
    return $errors;
}
add_filter( 'registration_errors', 'wptemplates_validate_phone_field', 10, 3 );

Здесь мы проверяем, что поле не пустое и соответствует шаблону: допустимы цифры и опциональный знак «+» в начале, длина от 10 до 15 символов. При ошибках выводится сообщение, и регистрация не проходит.

Сохранение пользовательского поля в метаданных

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

function wptemplates_save_phone_field( $user_id ) {
    if ( ! empty( $_POST['phone'] ) ) {
        update_user_meta( $user_id, 'phone', sanitize_text_field( $_POST['phone'] ) );
    }
}
add_action( 'user_register', 'wptemplates_save_phone_field' );

Теперь номер телефона будет сохраняться и привязываться к аккаунту пользователя.

Отображение поля «Телефон» в профиле пользователя в админке

Чтобы администратору было удобно видеть и редактировать номер телефона, добавим поле в профиль пользователя. Используем хуки show_user_profile и edit_user_profile:

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

И добавим обработчик сохранения:

function wptemplates_save_phone_field_profile( $user_id ) {
    if ( ! current_user_can( 'edit_user', $user_id ) ) {
        return false;
    }
    if ( isset( $_POST['phone'] ) ) {
        update_user_meta( $user_id, 'phone', sanitize_text_field( $_POST['phone'] ) );
    }
}
add_action( 'personal_options_update', 'wptemplates_save_phone_field_profile' );
add_action( 'edit_user_profile_update', 'wptemplates_save_phone_field_profile' );

Дополнительные плагины для расширения возможностей регистрации

Если вам не хочется писать код или нужны более продвинутые варианты, советую обратить внимание на эти плагины:

  • User Registration – Custom Registration Form, Login and User Profile for WordPress — визуальный конструктор форм с поддержкой кастомных полей и валидации.
  • Profile Builder — позволяет добавлять поля и управлять регистрацией, профилями и ролями.
  • Ultimate Member — мощный плагин для создания сообществ с расширенными профилями и формами.

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

Советы по безопасности и UX при добавлении полей регистрации

При работе с пользовательскими полями важно:

  • Обязательно валидировать и санитизировать все входящие данные.
  • Добавлять защиту от CSRF с помощью wp_nonce_field().
  • Не хранить чувствительные данные в открытом виде, если это требуется.
  • Давать понятные сообщения об ошибках — это улучшает опыт пользователя.
  • Делать поля обязательными только если действительно нужно, чтобы не отпугнуть пользователей.

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

WooCommerce: как изменить стоимость товаров в корзине без пересчета
21.05.2026
WooCommerce: как установить контроль размера изображений товаров в корзине
22.06.2026
Как отключить редактор Gutenberg в WordPress 5.9: практические способы и примеры
08.03.2026
Создаем свой шаблон для WordPress с нуля
04.11.2025
WooCommerce: как изменить стоимость товаров в корзине без пересчета
29.05.2026