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

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

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

Стандартная форма регистрации WordPress содержит минимальный набор полей: имя пользователя, email и пароль. Для сбора дополнительной информации (например, телефонов, адресов, согласий) нельзя просто изменить HTML шаблона, так как форма генерируется функцией register_form() и обработка данных происходит внутри ядра.

Использование хуков — правильный и безопасный способ добавить новые поля, так как они позволяют:

  • Добавлять HTML поля в форму регистрации;
  • Выполнять валидацию введённых данных;
  • Сохранять дополнительные данные в мета-поля пользователя;
  • Интегрироваться с другими плагинами и темами без конфликтов.

Для этого используются хуки register_form, registration_errors и user_register.

Добавление поля в форму регистрации через хук register_form

Начнём с вывода дополнительного поля. Допустим, мы хотим добавить поле «Телефон».

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

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

Валидация введённого поля через хук registration_errors

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

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

Здесь мы используем регулярное выражение, позволяющее вводить телефон с 10-15 цифрами, с опциональным знаком «+» в начале.

Сохранение дополнительного поля при регистрации через хук user_register

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

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

Функция update_user_meta сохранит значение в таблицу usermeta, что удобно для последующего получения и вывода.

Вывод и редактирование поля телефона в профиле пользователя

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

function wpteam_show_phone_field_in_profile( $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" />
            </td>
        </tr>
    </table>
    <?php
}
add_action( 'show_user_profile', 'wpteam_show_phone_field_in_profile' );
add_action( 'edit_user_profile', 'wpteam_show_phone_field_in_profile' );

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

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

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

Если вы предпочитаете готовые решения, рассмотрите эти плагины:

  • Clearfy Pro — плагин оптимизации с возможностями расширения форм и управления регистрацией;
  • WPCommunity — для сайтов с регистрацией и сообществом, поддерживает кастомные поля;
  • User Registration — бесплатный плагин с визуальным конструктором форм и поддержкой дополнительных полей.

Однако собственная реализация через хуки даёт максимальный контроль и минимальный вес сайта.

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

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

  • Регистрация с пустым полем телефона — должна появиться ошибка;
  • Ввод некорректного телефона (например, буквы) — ошибка;
  • Правильный ввод — регистрация успешна, и телефон сохраняется;
  • Отображение и редактирование телефона в профиле пользователя;
  • Проверка безопасности: очистка данных через sanitize_text_field и права доступа на редактирование.

Рекомендуется использовать режим отладки WordPress и логи веб-сервера для выявления ошибок.

Итог

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

Приведённые примеры кода легко адаптируются под любые поля и бизнес-логику. Используйте их как основу для своих проектов.

Как удалить кэш transient в WordPress для решения проблем с устаревшими данными
11.02.2026
Динамическая фильтрация таксономий в WordPress: решение и примеры кода
10.12.2025
Как использовать REST API в WordPress для создания собственных функций
13.11.2025
Как использовать AJAX в WordPress для динамического обновления контента
03.12.2025
Как создать и использовать собственные типы записей (Custom Post Types) в WordPress
05.02.2026