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

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

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

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

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

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

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

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

После добавления этого кода в файл functions.php активной темы при регистрации появится новое поле «Телефон».

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

Чтобы проверить правильность введённых данных и не допустить пустых или некорректных значений, необходимо использовать хук registration_errors. В нашем примере проверим, что поле "Телефон" заполнено и содержит только цифры, пробелы и знаки +, -, ().

function wptests_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
    if ( empty( $_POST['wptests_phone'] ) ) {
        $errors->add( 'wptests_phone_error', '<strong>Ошибка</strong>: Пожалуйста, введите телефон.' );
    } else {
        $phone = sanitize_text_field( $_POST['wptests_phone'] );
        if ( ! preg_match( '/^[0-9\s\+\-\(\)]+$/', $phone ) ) {
            $errors->add( 'wptests_phone_error', '<strong>Ошибка</strong>: Телефон содержит недопустимые символы.' );
        }
    }
    return $errors;
}
add_filter( 'registration_errors', 'wptests_validate_phone_field', 10, 3 );

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

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

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

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

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

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

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

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

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

После добавления этого кода в профиле пользователя появится поле для телефона, которое можно редактировать.

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

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

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

Вывод дополнительных данных на сайте и в письмах

После того, как дополнительные поля добавлены и сохранены, часто необходимо вывести эти данные на сайте, например, в личном кабинете или в письмах, которые отправляются при регистрации.

Для вывода телефона в шаблоне темы используйте:

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

Для добавления данных в письмо о регистрации можно воспользоваться фильтром wp_new_user_notification_email и добавить туда телефон.

Резюме и советы по безопасности

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

Этот подход можно расширять и на другие формы, например, вход, комментарии, контактные формы.

Если вы используете темы от WPSHOP, то код легко адаптируется под них, сохраняя совместимость и стандарты.

Как использовать AJAX в WordPress для обновления контекста без перезагрузки страницы
17.12.2025
WooCommerce: автоматическое отслеживание и изменение стоимости товаров при сменах вариаций
01.06.2026
Как изменить вывод атрибутов img в WordPress: практические примеры и советы
08.01.2026
Как настроить автопроверку форм в WordPress с помощью AJAX
12.04.2026
Как создать подписку на email в WordPress с AJAX без плагинов
25.03.2026