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

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

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

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

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

Добавление полей в форму регистрации WordPress

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

function wplab_add_registration_fields() {
    ?>
    <p>
        <label for="phone"><?php _e('Номер телефона', 'wplab'); ?><br />
            <input type="text" name="phone" id="phone" class="input" value="<?php echo esc_attr(wp_unslash($_POST['phone'] ?? '')); ?>" size="25" /></label>
    </p>
    <p>
        <label for="city"><?php _e('Город', 'wplab'); ?><br />
            <input type="text" name="city" id="city" class="input" value="<?php echo esc_attr(wp_unslash($_POST['city'] ?? '')); ?>" size="25" /></label>
    </p>
    <?php
}
add_action('register_form', 'wplab_add_registration_fields');

В этом коде мы добавили два поля: «Номер телефона» и «Город». Функция esc_attr и wp_unslash защищают от XSS и корректно выводят введённые пользователем данные при ошибке.

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

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

function wplab_validate_registration_fields($errors, $sanitized_user_login, $user_email) {
    if (empty($_POST['phone']) || !preg_match('/^[+\d\s\-]{7,15}$/', $_POST['phone'])) {
        $errors->add('phone_error', __('<strong>Ошибка</strong>: пожалуйста, введите корректный номер телефона.', 'wplab'));
    }
    if (empty($_POST['city'])) {
        $errors->add('city_error', __('<strong>Ошибка</strong>: поле «Город» обязательно для заполнения.', 'wplab'));
    }
    return $errors;
}
add_filter('registration_errors', 'wplab_validate_registration_fields', 10, 3);

Здесь проверяется, что номер телефона соответствует регулярному выражению, разрешающему цифры, пробелы, плюсы и дефисы в диапазоне от 7 до 15 символов. Для поля «Город» просто проверяем, что оно не пустое.

Сохранение данных дополнительных полей пользователя

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

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

Функция sanitize_text_field очищает данные от нежелательных символов, что важно для безопасности.

Вывод дополнительных полей в профиле пользователя

Часто нужно, чтобы администратор мог видеть и редактировать эти поля в профиле пользователя в админке. Для этого добавим поля в форму профиля с помощью хуков show_user_profile и edit_user_profile.

function wplab_show_extra_profile_fields($user) {
    ?>
    <h3><?php _e('Дополнительная информация', 'wplab'); ?></h3>
    <table class="form-table">
        <tr>
            <th><label for="phone"><?php _e('Номер телефона', 'wplab'); ?></label></th>
            <td>
                <input type="text" name="phone" id="phone" value="<?php echo esc_attr(get_user_meta($user->ID, 'phone', true)); ?>" class="regular-text" /><br />
                <span class="description"><?php _e('Введите номер телефона пользователя.', 'wplab'); ?></span>
            </td>
        </tr>
        <tr>
            <th><label for="city"><?php _e('Город', 'wplab'); ?></label></th>
            <td>
                <input type="text" name="city" id="city" value="<?php echo esc_attr(get_user_meta($user->ID, 'city', true)); ?>" class="regular-text" /><br />
                <span class="description"><?php _e('Введите город пользователя.', 'wplab'); ?></span>
            </td>
        </tr>
    </table>
    <?php
}
add_action('show_user_profile', 'wplab_show_extra_profile_fields');
add_action('edit_user_profile', 'wplab_show_extra_profile_fields');

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

Чтобы сохранить изменения, сделанные администратором, используем хуки personal_options_update и edit_user_profile_update.

function wplab_save_extra_profile_fields($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']));
    }
    if (isset($_POST['city'])) {
        update_user_meta($user_id, 'city', sanitize_text_field($_POST['city']));
    }
}
add_action('personal_options_update', 'wplab_save_extra_profile_fields');
add_action('edit_user_profile_update', 'wplab_save_extra_profile_fields');

Использование дополнительных полей в шаблонах и плагинах

Теперь, когда данные сохранены, можно выводить их на сайте, например, в шаблоне профиля пользователя:

$phone = get_user_meta(get_current_user_id(), 'phone', true);
echo 'Ваш номер телефона: ' . esc_html($phone);

Или использовать в условных проверках, рассылках, интеграциях с CRM и т.п.

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

Если не хочется писать код, можно использовать плагины. Например:

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

Но в ряде случаев собственный код будет предпочтительнее — это легче контролировать, оптимизировать и интегрировать под задачи.

Автоматическое удаление отменённых заказов WooCommerce
22.04.2026
Пагинация для архива кастомного типа записей в WordPress
16.12.2025
Как автоматизировать удаление старых комментариев в WordPress
28.12.2025
Как создать автоматический импорт продуктов из CSV в WooCommerce
21.02.2026
Как динамически изменить заголовок страницы в WordPress
25.12.2025