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

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

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

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

Основные хуки, которые пригодятся:

  • register_form — для вывода дополнительных полей в форме регистрации;
  • registration_errors — для валидации введенных данных;
  • user_register — для сохранения данных после успешной регистрации.

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

Для добавления дополнительных полей используем хук register_form. Например, добавим поле "Телефон" и "Компания".

function wpkeys_add_register_fields() {
    $phone = ( isset( $_POST['wpkeys_phone'] ) ) ? sanitize_text_field( $_POST['wpkeys_phone'] ) : '';
    $company = ( isset( $_POST['wpkeys_company'] ) ) ? sanitize_text_field( $_POST['wpkeys_company'] ) : '';
    echo '<p>';
    echo '<label for="wpkeys_phone">Телефон <span class="required">*</span></label><br>';
    echo '<input type="text" name="wpkeys_phone" id="wpkeys_phone" class="input" value="' . esc_attr( $phone ) . '" size="25" />';
    echo '</p>';

    echo '<p>';
    echo '<label for="wpkeys_company">Компания</label><br>';
    echo '<input type="text" name="wpkeys_company" id="wpkeys_company" class="input" value="' . esc_attr( $company ) . '" size="25" />';
    echo '</p>';
}
add_action( 'register_form', 'wpkeys_add_register_fields' );

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

Валидация введенных данных

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

function wpkeys_validate_register_fields( $errors, $sanitized_user_login, $user_email ) {
    if ( empty( $_POST['wpkeys_phone'] ) || ! preg_match( '/^\+?\d{10,15}$/', $_POST['wpkeys_phone'] ) ) {
        $errors->add( 'wpkeys_phone_error', 'Пожалуйста, введите корректный номер телефона (цифры, возможно с плюсом в начале).');
    }
    return $errors;
}
add_filter( 'registration_errors', 'wpkeys_validate_register_fields', 10, 3 );

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

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

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

function wpkeys_save_register_fields( $user_id ) {
    if ( isset( $_POST['wpkeys_phone'] ) ) {
        update_user_meta( $user_id, 'wpkeys_phone', sanitize_text_field( $_POST['wpkeys_phone'] ) );
    }
    if ( isset( $_POST['wpkeys_company'] ) ) {
        update_user_meta( $user_id, 'wpkeys_company', sanitize_text_field( $_POST['wpkeys_company'] ) );
    }
}
add_action( 'user_register', 'wpkeys_save_register_fields' );

Так данные пользователя сохранятся и будут доступны через функцию get_user_meta($user_id, 'wpkeys_phone', true).

Вывод дополнительных полей на странице редактирования пользователя в админке

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

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

Также нужно сохранить изменения, если админ редактирует профиль:

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

Рекомендации по безопасности и удобству

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

Если предполагается более сложный ввод, например, телефон с маской, можно подключить JavaScript-плагины для валидации на клиенте.

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

Выводы

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

WooCommerce: автоматическое изменение стоимости и наличия товара при оформлении заказа
12.07.2026
Как использовать хуки для отложенного выполнения кода в WordPress
28.01.2026
Как автоматизировать обновление контента в WordPress с помощью WPGPT
10.02.2026
WooCommerce: автоматическое изменение цены и наличия товара через AJAX без перезагрузки страницы
08.06.2026
WooCommerce: автоматическое изменение атрибутов товаров при оформлении заказа
19.06.2026

На оформлении, скоро здесь появится полноценный ресурс