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

Диагностика задачи: зачем нужны хуки для обработки заказов в WooCommerce

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

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

Пошаговое решение: как добавить обработчик статуса заказа

1. Определяем нужный хук

Для обработки изменения статуса заказа в WooCommerce есть хук woocommerce_order_status_changed. Он вызывается при любом изменении статуса заказа и передает параметры:

  • $order_id — ID заказа;
  • $old_status — предыдущий статус;
  • $new_status — новый статус;
  • $order — объект заказа.

2. Добавляем функцию-обработчик

Пример добавления функции, которая логирует смену статуса в файл wp-content/debug.log:

add_action('woocommerce_order_status_changed', 'my_custom_order_status_change', 10, 4); 
function my_custom_order_status_change($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'completed') {
        error_log("Заказ #" . $order_id . " изменен на статус 'completed'.");
        // Здесь можно добавить дополнительную логику
    }
}

3. Подключаем код правильно

Добавьте код в файл functions.php активной темы или создайте небольшой плагин, чтобы изменения не потерялись при обновлении темы.

Как проверить, что обработчик сработал

1. Включите логирование ошибок, если оно отключено, добавив в wp-config.php:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

2. Измените статус любого заказа в панели WooCommerce на «Завершен» (completed).

3. Откройте файл wp-content/debug.log и найдите запись с номером заказа.

Если запись появилась — обработчик работает.

Частые ошибки и способы их устранения

  • Код не срабатывает: убедитесь, что функция подключена и нет синтаксических ошибок. Проверьте, что при добавлении обработчика указан правильный приоритет и количество аргументов (10, 4).
  • Нет лога в debug.log: проверьте настройки WP_DEBUG и права на запись в папку wp-content.
  • Неверный статус: используйте именно системные статусы WooCommerce (pending, processing, completed и т.п.), а не строки на русском.
  • Конфликт с другими плагинами: временно отключите другие плагины, если код не срабатывает.

Расширение: добавление кастомного поля при смене статуса

Пример добавления мета-данных к заказу при переходе в статус processing:

add_action('woocommerce_order_status_changed', 'add_custom_meta_on_status', 10, 4);
function add_custom_meta_on_status($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'processing') {
        $order->update_meta_data('_custom_processing_time', current_time('mysql'));
        $order->save();
    }
}

Сравнение способов обработки заказов: хуки vs плагины

Метод Плюсы Минусы Когда использовать
Хуки в functions.php или плагине Гибкость, контроль, не нагружает сайт, можно быстро отладить Требует навыков разработки, возможность ошибок При индивидуальной логике, интеграциях, кастомизации
Плагины для обработки заказов Легко установить, часто имеют UI, поддержка Могут влиять на производительность, ограничены функционалом Для стандартных задач без кастомных требований

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

  • Избегайте тяжелых операций в хуках, вызываемых при каждом изменении заказа — лучше ставьте задачи на крон или очереди.
  • Всегда проверяйте права доступа и валидируйте данные, особенно при взаимодействии с внешними сервисами.
  • Используйте транзиенты или кэширование, если обрабатываете часто вызываемые хуки.
  • Логируйте только при необходимости, чтобы не забивать диск логами.
Как создать адаптивные таблицы в WordPress
10.04.2026
Как использовать хуки в WordPress для оптимизации кода
21.11.2025
Как использовать WooCommerce хуки для настройки страницы товара
17.04.2026
Как добавить собственные типы записей в WordPress: практическое руководство
23.12.2025
Как добавить уведомление после обновления WordPress
26.03.2026