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

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

Почему важно кастомизировать форму регистрации WordPress

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

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

Однако важно делать это правильно, чтобы не сломать логику регистрации и обеспечить сохранность данных.

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

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

Например, добавим поле «Телефон» в форму регистрации:

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

Этот код отображает поле в форме, при этом сохраняет введённое значение, если регистрация не прошла.

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

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

function wpdemo_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
    if ( empty( $_POST['wpdemo_phone'] ) ) {
        $errors->add( 'wpdemo_phone_error', '<strong>Ошибка</strong>: Пожалуйста, введите телефон.' );
    } elseif ( ! preg_match( '/^\+?[0-9]{10,15}$/', $_POST['wpdemo_phone'] ) ) {
        $errors->add( 'wpdemo_phone_error', '<strong>Ошибка</strong>: Телефон должен содержать от 10 до 15 цифр, возможно с плюсом в начале.' );
    }
    return $errors;
}
add_filter( 'registration_errors', 'wpdemo_validate_phone_field', 10, 3 );

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

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

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

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

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

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

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

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

И добавим сохранение при обновлении профиля:

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

Дополнительные советы по кастомизации формы регистрации

Добавление нескольких полей

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

Использование плагинов для добавления полей

Если хочется не писать код вручную, можно использовать плагины, например Clearfy Pro для расширенной кастомизации форм, либо WP Community, если нужна регистрация с дополнительными возможностями. Однако кодовый подход даёт максимальный контроль и гибкость.

Защита данных и безопасность

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

Пример расширенной формы с несколькими полями

Добавим полей «Телефон» и «Компания» с проверкой и сохранением:

function wpdemo_add_custom_registration_fields() {
    $phone = isset( $_POST['wpdemo_phone'] ) ? sanitize_text_field( $_POST['wpdemo_phone'] ) : '';
    $company = isset( $_POST['wpdemo_company'] ) ? sanitize_text_field( $_POST['wpdemo_company'] ) : '';
    echo '<p><label for="wpdemo_phone">Телефон</label><br />'
        . '<input type="text" name="wpdemo_phone" id="wpdemo_phone" class="input" value="' . esc_attr( $phone ) . '" size="25" /></p>';
    echo '<p><label for="wpdemo_company">Компания</label><br />'
        . '<input type="text" name="wpdemo_company" id="wpdemo_company" class="input" value="' . esc_attr( $company ) . '" size="25" /></p>';
}
add_action('register_form', 'wpdemo_add_custom_registration_fields');

function wpdemo_validate_custom_registration_fields( $errors, $sanitized_user_login, $user_email ) {
    if ( empty( $_POST['wpdemo_phone'] ) ) {
        $errors->add( 'wpdemo_phone_error', '<strong>Ошибка</strong>: Пожалуйста, введите телефон.' );
    } elseif ( ! preg_match( '/^\+?[0-9]{10,15}$/', $_POST['wpdemo_phone'] ) ) {
        $errors->add( 'wpdemo_phone_error', '<strong>Ошибка</strong>: Телефон должен содержать от 10 до 15 цифр.' );
    }
    if ( empty( $_POST['wpdemo_company'] ) ) {
        $errors->add( 'wpdemo_company_error', '<strong>Ошибка</strong>: Пожалуйста, укажите компанию.' );
    }
    return $errors;
}
add_filter( 'registration_errors', 'wpdemo_validate_custom_registration_fields', 10, 3 );

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

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

Заключение

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

Для тех, кто не хочет писать код, советуем обратить внимание на плагины из WPShop.ru, такие как Clearfy Pro, которые помогают расширять стандартные возможности WordPress без сложного программирования.

WooCommerce: автоматический сброс статуса заказа при ошибках платежа
30.04.2026
Как сделать удалённый вывод данных в WordPress с помощью WP REST API
24.01.2026
Как отключить автовоспроизведение видео в блоках Gutenberg WordPress
11.02.2026
Как создать и использовать кастомные таксономии в WordPress
05.01.2026
Как использовать WPRemark для автоматического ответа на комментарии WordPress
08.02.2026