Как изменить и добавить дополнительные поля в форму регистрации 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 без сложного программирования.

Как использовать AJAX для пагинации в WordPress с примерами кода
24.03.2026
Оптимизация базы данных WordPress: практические советы и примеры кода
07.11.2025
Как отключить Gutenberg и вернуть классический редактор в WordPress
03.04.2026
Как сделать автоматический отзыв на комментарии в WordPress
10.04.2026
Как использовать WPCommunity для создания форума на WordPress
27.02.2026