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

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

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

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

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

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

function wpkama_add_phone_field() {
    $phone = ( ! empty( $_POST['wpkama_phone'] ) ) ? sanitize_text_field( $_POST['wpkama_phone'] ) : '';
    echo '<p><label for="wpkama_phone">Телефон<span style="color:red">*</span></label><br />'
        . '<input type="text" name="wpkama_phone" id="wpkama_phone" class="input" value="' . esc_attr( $phone ) . '" size="25" /></p>';
}
add_action( 'register_form', 'wpkama_add_phone_field' );

Здесь мы выводим поле с названием «Телефон» и атрибутом name="wpkama_phone", чтобы потом получить его значение в обработчике регистрации.

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

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

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

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

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

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

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

Данные будут сохранены в таблице wp_usermeta с мета-ключом wpkama_phone, что позволит гибко использовать их далее.

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

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

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

Это выведет поле «Телефон» в профиле пользователя.

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

Чтобы изменения сохранялись, нужно обработать событие сохранения профиля.

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

Как использовать сохранённый номер телефона в шаблонах и коде

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

$phone = get_user_meta( $user_id, 'wpkama_phone', true );
if ( $phone ) {
    echo '<p>Телефон пользователя: ' . esc_html( $phone ) . '</p>';
}

Это удобно, например, для вывода контактов в личном кабинете или в письмах.

Резюме и рекомендации

Добавление дополнительных полей в форму регистрации — частая задача, решаемая через хуки register_form, registration_errors и user_register. Такой подход легковесен и полностью контролируем, в отличие от плагинов. Главное — не забывать про валидацию и безопасность (санитизацию данных).

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

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

⭐⭐⭐⭐⭐