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

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

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

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

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

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

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

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

Пример добавления поля «Номер телефона»:

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

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

Валидация дополнительного поля при регистрации

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

add_filter( 'registration_errors', 'wpgenerate_validate_phone_field', 10, 3 );
function wpgenerate_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
    if ( empty( $_POST['phone'] ) || ! preg_match( '/^\+?\d{10,15}$/', $_POST['phone'] ) ) {
        $errors->add( 'phone_error', '<strong>Ошибка</strong>: Пожалуйста, введите корректный номер телефона, состоящий из 10-15 цифр.' );
    }
    return $errors;
}

В данном примере мы проверяем, что номер телефона содержит от 10 до 15 цифр с опциональным знаком + в начале. Если поле пустое или не соответствует шаблону, добавляется ошибка.

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

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

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

Теперь в базе данных появится мета-поле phone с нужным значением.

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

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

add_action( 'show_user_profile', 'wpgenerate_show_phone_field' );
add_action( 'edit_user_profile', 'wpgenerate_show_phone_field' );
function wpgenerate_show_phone_field( $user ) {
    ?>
    <h3>Дополнительная информация</h3>
    <table class="form-table">
        <tr>
            <th><label for="phone">Номер телефона</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">Введите номер телефона пользователя.</span>
            </td>
        </tr>
    </table>
    <?php
}

Для сохранения изменений добавим обработчик на сохранение профиля:

add_action( 'personal_options_update', 'wpgenerate_save_phone_profile' );
add_action( 'edit_user_profile_update', 'wpgenerate_save_phone_profile' );
function wpgenerate_save_phone_profile( $user_id ) {
    if ( current_user_can( 'edit_user', $user_id ) ) {
        if ( isset( $_POST['phone'] ) ) {
            update_user_meta( $user_id, 'phone', sanitize_text_field( $_POST['phone'] ) );
        }
    }
}

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

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

Также рекомендуется использовать WPRemark для расширенного управления профилями и комментариями.

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

Для вывода номера телефона в шаблонах темы можно использовать следующий код, например, в файле author.php или в шаблоне профиля пользователя:

$phone = get_user_meta( get_the_author_meta('ID'), 'phone', true );
if ( $phone ) {
    echo '<p>Номер телефона: ' . esc_html( $phone ) . '</p>';
}

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

Как добавить дополнительное поле в форму регистрации WordPress с сохранением и валидацией
11.12.2025
Автоматическое удаление неактивных пользователей WooCommerce
25.04.2026
Как отследить и удалить нерабочие ссылки в WooCommerce
20.04.2026
Как создать автоматические отзывы в WordPress с плагином Expert Review
13.03.2026
Автоматическое отключение плагинов в WordPress по расписанию
16.04.2026