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

|

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

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

Стандартная регистрация ограничена, и расширение формы позволяет:

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

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

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

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

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

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

Чтобы проверить, что пользователь заполнил поле, используем хук registration_errors. В нашем случае проверим, что телефон не пустой и соответствует шаблону.

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

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

Сохранение дополнительных данных при регистрации

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

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

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

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

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

Добавление поля в профиль пользователя

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

Сохранение изменений в профиле

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

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

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

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

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

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

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

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

$phone = get_user_meta( $user_id, 'wppremium_phone', true );
echo esc_html( $phone );

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

WooCommerce: решение проблемы с отсутствием писем подтверждения заказов
17.06.2026
Как изменить автозаголовок WordPress динамически на основе контекста
11.02.2026
WooCommerce: программное удаление неактивных корзин и заказов без плагинов
04.06.2026
Как автоматически удалять пустые термины в WordPress: практическое руководство
12.04.2026
Как создать многоуровневый фильтр продуктов в WordPress без плагинов
11.01.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее