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

Зачем нужны дополнительные поля в заказах WooCommerce

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

Диагностика проблемы: почему стандартных полей недостаточно

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

Типичные признаки проблемы:

  • Отсутствие нужного поля в форме оформления заказа.
  • Невозможность сохранить или получить дополнительную информацию в админке WooCommerce.

Пошаговое решение: добавляем и обрабатываем дополнительные поля

1. Добавление поля в форму оформления заказа

Используем хук woocommerce_after_order_notes для вывода дополнительного поля, например, текстового поля "Номер получателя":

add_action('woocommerce_after_order_notes', 'wpchecker_add_custom_checkout_field');
function wpchecker_add_custom_checkout_field($checkout) {
    echo '<div id="custom_checkout_field">';
    woocommerce_form_field('recipient_phone', array(
        'type' => 'text',
        'class' => array('form-row-wide'),
        'label' => __('Номер получателя'),
        'placeholder' => __('Введите номер получателя'),
        'required' => true,
    ), $checkout->get_value('recipient_phone'));
    echo '</div>';
}

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

Добавим валидацию для обязательного поля с помощью хука woocommerce_checkout_process:

add_action('woocommerce_checkout_process', 'wpchecker_validate_custom_checkout_field');
function wpchecker_validate_custom_checkout_field() {
    if (empty($_POST['recipient_phone'])) {
        wc_add_notice(__('Пожалуйста, введите номер получателя.'), 'error');
    }
}

3. Сохранение данных в метаданных заказа

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

add_action('woocommerce_checkout_update_order_meta', 'wpchecker_save_custom_checkout_field');
function wpchecker_save_custom_checkout_field($order_id) {
    if (!empty($_POST['recipient_phone'])) {
        update_post_meta($order_id, '_recipient_phone', sanitize_text_field($_POST['recipient_phone']));
    }
}

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

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

add_action('woocommerce_admin_order_data_after_billing_address', 'wpchecker_display_custom_field_admin_order', 10, 1);
function wpchecker_display_custom_field_admin_order($order){
    $recipient_phone = get_post_meta($order->get_id(), '_recipient_phone', true);
    if ($recipient_phone) {
        echo '<p><strong>Номер получателя:</strong> ' . esc_html($recipient_phone) . '</p>';
    }
}

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

  • Перейдите на страницу оформления заказа и убедитесь, что поле "Номер получателя" отображается и является обязательным.
  • Попробуйте оформить заказ без заполнения поля — должна появиться ошибка.
  • Оформите заказ с заполненным полем.
  • В админке откройте заказ и проверьте, что значение поля отображается корректно.

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

  • Поле не отображается в форме — проверьте правильность использования хука, не конфликтует ли тема или другой плагин с выводом.
  • Ошибка валидации не появляется — убедитесь, что хук woocommerce_checkout_process подключён и функция корректно проверяет $_POST.
  • Данные не сохраняются — проверьте, что функция сохраняет данные с помощью update_post_meta и поле name в форме совпадает с ключом в $_POST.
  • Данные не видны в админке — убедитесь, что используете корректный хук woocommerce_admin_order_data_after_billing_address и правильно получаете метаданные заказа.

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

  • Обязательно фильтруйте пользовательский ввод через sanitize_text_field или другие функции в зависимости от типа данных.
  • Не сохраняйте избыточные или чувствительные данные в метаданных заказа без необходимости.
  • Если планируется много дополнительных полей, рассмотрите создание отдельной таблицы или использование кастомных постов для хранения данных, чтобы не перегружать метаданные.
  • Тестируйте совместимость с другими плагинами, которые могут менять процесс оформления заказа.

Сравнение способов добавления дополнительных полей

СпособПлюсыМинусы
Код в functions.php или кастомном плагинеПолный контроль, минимум плагинов, гибкостьТребует навыков разработки, возможны ошибки
Плагины (например, Checkout Field Editor)Удобство, визуальная настройка без кодаЗависимость от стороннего кода, нагрузка, ограничения
Как правильно удалить метаданные в WordPress без повреждений
05.12.2025
Как удалить дубликаты постов в WordPress без плагинов
30.03.2026
Как использовать WPChecker для анализа и оптимизации работы с плагинами WordPress
10.04.2026
WooCommerce: как установить и настроить дополнительные поля для заказов
18.05.2026
Как удалить неиспользуемые метаданные в WordPress для ускорения сайта
28.11.2025