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

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

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

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

  • Собрать дополнительную контактную информацию
  • Улучшить персонализацию сайта и коммуникацию
  • Реализовать бизнес-логику, например, проверку возраста
  • Собрать данные для маркетинга и аналитики

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

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

Для начала расширим форму регистрации, добавив новое поле. Для этого используем хук register_form. Ниже пример добавления поля "Телефон":

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

Этот код добавит на страницу регистрации новое текстовое поле. Важно использовать sanitize_text_field и esc_attr для защиты данных.

Валидация и обработка новых полей при регистрации

После добавления поля необходимо проверить корректность введенных данных и сохранить их. Для валидации используем хук registration_errors:

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

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

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

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

Таким образом, дополнительное поле будет сохранено и доступно в профиле пользователя через get_user_meta.

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

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

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

Для сохранения изменений применим хук personal_options_update и edit_user_profile_update:

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

Использование плагинов для упрощения добавления полей

Если вы предпочитаете не писать код вручную, существуют плагины, которые позволяют добавлять произвольные поля в форму регистрации и профиль пользователя. Вот несколько полезных примеров:

  • User Registration — визуальный конструктор форм с поддержкой произвольных полей и интеграцией с WooCommerce и другими сервисами.
  • Profile Builder — расширенные возможности по кастомизации профиля и регистрации, в том числе защита от спама и валидация.
  • Clearfy Pro — плагин оптимизации, который помимо прочего позволяет управлять полями регистрации и профиля для повышения безопасности и юзабилити. Подробнее на wpshop.ru.

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

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

При добавлении кастомных полей и обработке пользовательских данных всегда учитывайте следующие моменты:

  • Используйте функции фильтрации и экранирования данных: sanitize_text_field, esc_attr, wp_kses_post и др.
  • Обязательно проверяйте и валидируйте данные перед сохранением, чтобы избежать XSS, SQL-инъекций и других атак.
  • Не храните чувствительные данные в открытом виде. Если нужно, применяйте шифрование и безопасное хранение.
  • Тестируйте работу новых полей с активными плагинами безопасности и кэширования.
  • Оптимизируйте запросы к базе данных, особенно если добавляете множество кастомных метаданных.

Итог

Добавление произвольных полей в форму регистрации WordPress — это простой и эффективный способ расширить функциональность сайта. Используя хуки register_form, registration_errors, user_register и профильные фильтры, вы можете создать удобный интерфейс для сбора нужных данных и корректно их обработать. А если хочется упростить процесс, можно воспользоваться надежными плагинами, такими как Clearfy Pro.

Надеюсь, этот разбор поможет вам быстро и безопасно внедрить произвольные поля в регистрацию и профили пользователей на вашем WordPress-сайте.

WooCommerce: настройка подтверждения отзывов через email для улучшения качества и надежности
28.04.2026
Оптимизация базы данных WordPress: лучшие практики и решения
24.11.2025
Как избежать фейковых отзывов на WordPress сайте
17.12.2025
WooCommerce: изменение стоимости вариативных товаров в зависимости от выбранных атрибутов
24.05.2026
Как автоматизировать создание резервной копии WordPress
03.12.2025