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

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

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

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

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

Добавление кастомного поля в форму регистрации WordPress: пошаговое руководство

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

1. Вывод дополнительного поля в форме регистрации

Для добавления поля используем хук register_form. В функции выведем HTML с input:

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

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

2. Валидация поля при регистрации

Чтобы убедиться, что пользователь ввел телефон, используем хук registration_errors:

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

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

3. Сохранение значения поля в профиль пользователя

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

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

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

Отображение и редактирование дополнительного поля в профиле пользователя

Чтобы администраторы могли видеть и менять телефон, добавим поле в админку:

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

function wpfaq_save_phone_field_in_profile( $user_id ) {
    if ( current_user_can( 'edit_user', $user_id ) && ! empty( $_POST['wpfaq_phone'] ) ) {
        update_user_meta( $user_id, 'wpfaq_phone', sanitize_text_field( $_POST['wpfaq_phone'] ) );
    }
}
add_action( 'personal_options_update', 'wpfaq_save_phone_field_in_profile' );
add_action( 'edit_user_profile_update', 'wpfaq_save_phone_field_in_profile' );

Так администратор и сам пользователь смогут управлять этим полем.

Использование плагинов для добавления дополнительных полей в регистрацию

Если вы не хотите писать код или нужны сложные формы, можно использовать готовые плагины:

  • User Registration — бесплатный плагин с удобным конструктором форм, поддержкой кастомных полей и интеграцией с email-сервисами.
  • Profile Builder — позволяет создавать любые формы регистрации и редактирования профиля с кастомными полями.
  • WP User Manager — мощный плагин для управления пользователями и расширения форм регистрации.

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

Советы по безопасности и удобству при добавлении новых полей

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

Не забывайте про локализацию текста, если сайт многоязычный — оборачивайте строки в функции __() и _e().

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

Пример полного кода для добавления поля «Телефон» в регистрацию WordPress

<?php
// Вывод поля в форме регистрации
function wpfaq_add_phone_field() {
    $phone = ( ! empty( $_POST['wpfaq_phone'] ) ) ? sanitize_text_field( $_POST['wpfaq_phone'] ) : '';
    echo '<p><label for="phone">Телефон <span class="required">*</span></label><br />';
    echo '<input type="text" name="wpfaq_phone" id="phone" class="input" value="' . esc_attr( $phone ) . '" size="25" /></p>';
}
add_action('register_form', 'wpfaq_add_phone_field');

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

// Сохранение данных
function wpfaq_save_phone_field( $user_id ) {
    if ( ! empty( $_POST['wpfaq_phone'] ) ) {
        update_user_meta( $user_id, 'wpfaq_phone', sanitize_text_field( $_POST['wpfaq_phone'] ) );
    }
}
add_action('user_register', 'wpfaq_save_phone_field');

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

// Сохранение поля из профиля
function wpfaq_save_phone_field_in_profile( $user_id ) {
    if ( current_user_can( 'edit_user', $user_id ) && ! empty( $_POST['wpfaq_phone'] ) ) {
        update_user_meta( $user_id, 'wpfaq_phone', sanitize_text_field( $_POST['wpfaq_phone'] ) );
    }
}
add_action( 'personal_options_update', 'wpfaq_save_phone_field_in_profile' );
add_action( 'edit_user_profile_update', 'wpfaq_save_phone_field_in_profile' );
?>

Этот код можно добавить в файл functions.php вашей темы или оформить отдельным мини-плагином.

Заключение

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

Если хотите расширить функционал еще проще и без кода, обратите внимание на плагины из репозитория WordPress или продукты с сайта WPSHOP.RU, где есть решения для управления формами и профилями.

Как отключить AJAX в WooCommerce без потери функциональности
08.12.2025
Как установить ограничение на регистрацию по IP в WordPress
31.03.2026
WooCommerce: как отключить вариации товаров в корзине без потери функциональности
15.05.2026
Удаление неиспользуемых изображений в WordPress для оптимизации сайта
20.12.2025
WooCommerce: автоматическое отключение неактивных методов оплаты
12.06.2026