WooCommerce: как добавить пользовательское поле в форму регистрации с помощью кода

Диагностика задачи: зачем добавлять пользовательские поля в форму регистрации WooCommerce

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

Пошаговое решение: добавляем поле "Дата рождения" в форму регистрации WooCommerce

Шаг 1. Вывод дополнительного поля в форме регистрации

Для вывода нового поля используйте хук woocommerce_register_form. Добавим поле "Дата рождения":

add_action('woocommerce_register_form', 'wpbegin_add_birthday_field');
function wpbegin_add_birthday_field() {
    ?>
    <p class="form-row form-row-wide">
        <label for="reg_birthday">Дата рождения <span class="required">*</span></label>
        <input type="date" class="input-text" name="birthday" id="reg_birthday" value="" />
    </p>
    <?php
}

Шаг 2. Проверка заполнения поля при регистрации

Обязательное поле нужно проверить. Используйте фильтр woocommerce_registration_errors:

add_filter('woocommerce_registration_errors', 'wpbegin_validate_birthday_field', 10, 3);
function wpbegin_validate_birthday_field($errors, $username, $email) {
    if (empty($_POST['birthday'])) {
        $errors->add('birthday_error', 'Пожалуйста, укажите дату рождения.');
    }
    return $errors;
}

Шаг 3. Сохранение пользовательского поля в метаданных пользователя

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

add_action('woocommerce_created_customer', 'wpbegin_save_birthday_field');
function wpbegin_save_birthday_field($customer_id) {
    if (isset($_POST['birthday'])) {
        update_user_meta($customer_id, 'birthday', sanitize_text_field($_POST['birthday']));
    }
}

Шаг 4. Отображение пользовательского поля в профиле админа

Чтобы видеть дату рождения в панели администратора, добавим поле на страницу редактирования пользователя:

add_action('show_user_profile', 'wpbegin_show_birthday_field');
add_action('edit_user_profile', 'wpbegin_show_birthday_field');
function wpbegin_show_birthday_field($user) {
    $birthday = get_user_meta($user->ID, 'birthday', true);
    ?>
    <h3>Дополнительная информация WooCommerce</h3>
    <table class="form-table">
        <tr>
            <th><label for="birthday">Дата рождения</label></th>
            <td>
                <input type="date" name="birthday" id="birthday" value="<?php echo esc_attr($birthday); ?>" class="regular-text" /><br />
                <span class="description">Укажите дату рождения клиента.</span>
            </td>
        </tr>
    </table>
    <?php
}
add_action('personal_options_update', 'wpbegin_save_birthday_field_admin');
add_action('edit_user_profile_update', 'wpbegin_save_birthday_field_admin');
function wpbegin_save_birthday_field_admin($user_id) {
    if (!current_user_can('edit_user', $user_id)) {
        return false;
    }
    if (isset($_POST['birthday'])) {
        update_user_meta($user_id, 'birthday', sanitize_text_field($_POST['birthday']));
    }
}

Проверка результата после внедрения

  • Перейдите на страницу регистрации WooCommerce, убедитесь, что поле «Дата рождения» отображается.
  • Попробуйте зарегистрироваться без заполнения поля — должна появиться ошибка.
  • После успешной регистрации в админке WordPress в профиле пользователя проверьте наличие сохранённой даты рождения.
  • Измените дату рождения в админке, сохраните и убедитесь, что изменения применились.

Частые ошибки и как исправить

  • Поле не отображается на форме регистрации: Проверьте, что функция вывода подключена к хуку woocommerce_register_form и тема/плагин не переопределяют форму регистрации.
  • Ошибка проверки не появляется: Убедитесь, что фильтр woocommerce_registration_errors правильно возвращает объект WP_Error и добавляет ошибки.
  • Данные не сохраняются: Проверьте, что функция сохранения подключена к хуку woocommerce_created_customer и что $_POST['birthday'] действительно передаётся.
  • Данные не отображаются в профиле: Убедитесь, что метаданные сохраняются с правильным ключом и выводятся через get_user_meta.

Практические советы по безопасности и производительности

  • Всегда используйте функции sanitize_text_field() или специализированные санитайзеры при работе с пользовательскими данными.
  • Для даты лучше использовать тип date в input, чтобы минимизировать ошибки формата.
  • Не храните персональные данные без необходимости, соблюдайте требования законодательства по защите данных.
  • Для массовых изменений пользовательских полей используйте WP CLI для ускорения обработки.

Сравнение способов добавления пользовательских полей в регистрацию WooCommerce

МетодПлюсыМинусыПример использования
Код через хукиПолный контроль, минимально нагружает сайт, не требует плагиновТребует знаний PHP, возможны ошибки при обновленияхПример из статьи — добавление поля "Дата рождения" через хуки
Плагины (например, "WooCommerce Checkout Field Editor")Удобный интерфейс, быстрое добавление полейДополнительная нагрузка, ограниченная гибкостьУстановка и настройка из админки
Использование пользовательских форм регистрации (кастомные шаблоны)Максимальная гибкость и кастомизацияСложность поддержки, требует глубоких знаний темы и WooCommerceСоздание отдельного шаблона регистрации
WooCommerce: как автоматически удалять товары после отмены заказа
08.07.2026
Как создать собственный виджет WordPress: подробное техническое руководство
10.11.2025
Как отключить xmlrpc.php в WordPress без поломки авторизации и внешних подключений
12.08.2026
Как создать динамический фильтр по метаданным в WordPress с AJAX
03.03.2026
Оптимизация базы данных WordPress: практические советы
05.11.2025