Использование хука WooCommerce checkout_process для дополнительной проверки при оформлении заказа

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

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

Что такое хук woocommerce_checkout_process и как он работает

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

Ключевые особенности:

  • Можно использовать функцию wc_add_notice() для добавления ошибок в процессе оформления.
  • Если ошибки добавлены, оформление заказа не будет продолжено, а пользователь вернётся на страницу оформления с сообщениями.
  • Хук не принимает аргументов, все данные доступны через глобальный объект $_POST.

Пошаговое решение: добавление пользовательской проверки на этапе оформления заказа

Рассмотрим пример, когда нужно проверить, что пользователь заполнил дополнительное поле «Номер договора» в форме оформления заказа и запретить оформление, если поле пустое.

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

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

add_action('woocommerce_after_order_notes', 'add_contract_number_checkout_field');
function add_contract_number_checkout_field($checkout) {
    woocommerce_form_field('contract_number', array(
        'type'          => 'text',
        'class'         => array('form-row-wide'),
        'label'         => __('Номер договора'),
        'placeholder'   => __('Введите номер договора'),
        'required'      => false,
    ), $checkout->get_value('contract_number'));
}

Как проверить, что решение работает

  1. Добавьте код в файл functions.php вашей дочерней темы или в кастомный плагин.
  2. Перейдите на страницу оформления заказа WooCommerce.
  3. В поле "Номер договора" оставьте пустым и нажмите "Оформить заказ".
  4. Должно появиться сообщение об ошибке "Пожалуйста, укажите номер договора" и оформление заказа не произойдёт.
  5. Заполните поле и оформите заказ — ошибок быть не должно.

Частые ошибки при использовании woocommerce_checkout_process

  • Не добавлено сообщение об ошибке: без вызова wc_add_notice() пользователь не узнает, почему заказ не оформляется.
  • Неверное имя поля в $_POST: нужно точно знать ключ поля, иначе проверка не сработает.
  • Добавление поля без отображения в форме: проверять нужно только те поля, которые реально есть на странице оформления.
  • Код не подключён или подключён в неправильном месте: убедитесь, что функция добавлена в functions.php дочерней темы или в плагин и хук срабатывает.

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

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

Сравнение способов добавить проверку в WooCommerce checkout

СпособПлюсыМинусы
Хук woocommerce_checkout_processПростая реализация, работает на сервере, можно добавить любые проверкиНе подходит для валидации на клиенте, требует перезагрузки страницы
JavaScript-валидация на клиентеМгновенная проверка без перезагрузкиМожно обойти, не защищает серверную часть
Использование плагинов для кастомных полей с проверкойГотовые решения, удобство настройкиЗависимость от плагина, могут быть избыточны
Как отключить автозагрузку изображений в WordPress для ускорения сайта
13.04.2026
Как создать настройку выбора темы в WordPress с использованием AJAX
10.01.2026
Как использовать WP-Cron для автоматического удаления неактуальных отзывов WooCommerce
28.05.2026
Как использовать хуки в WordPress: практические примеры и создание своих хуков
22.11.2025
Как создать автоматическое отправление email в WordPress с помощью WP-Cron
01.04.2026