Что такое хуки WooCommerce и зачем они нужны для автоматизации
Хуки (actions и filters) в WooCommerce позволяют вмешиваться в процесс обработки заказов без изменения исходного кода плагина. Это дает возможность автоматизировать задачи: обновлять статусы заказов, отправлять уведомления, менять метаданные, интегрировать с внешними системами и многое другое.
Диагностика: как понять, где и какие хуки использовать
Если вам нужно автоматизировать конкретный сценарий — например, отправку уведомления после смены статуса заказа или автоматическое обновление пользовательских полей — первым делом нужно определить событие, которое будет триггером.
Для этого полезно:
- Изучить документацию WooCommerce по хукам https://woocommerce.com/document/hooks/;
- Включить логирование хуков с помощью плагина
Query Monitorили добавить временный код для отладки; - Проверить, какие хуки вызываются при нужных действиях через
do_actionиapply_filtersв исходниках WooCommerce.
Пошаговое решение: пример автоматизации изменения статуса заказа
Задача: после оплаты заказа автоматически добавить к заказу метку «Оплачен» и отправить кастомное уведомление администратору.
Шаг 1. Используем хук woocommerce_order_status_processing
Этот хук срабатывает при смене статуса заказа на «в обработке» (обычно после оплаты).
add_action('woocommerce_order_status_processing', 'custom_order_status_processing_action', 10, 1);
function custom_order_status_processing_action($order_id) {
if (!$order_id) return;
$order = wc_get_order($order_id);
// Добавляем метку "Оплачен"
$order->update_meta_data('_custom_payment_label', 'Оплачен');
$order->save();
// Отправляем уведомление админу
$admin_email = get_option('admin_email');
wp_mail($admin_email, "Заказ #$order_id оплачен", "Заказ #$order_id был оплачен и обновлен.");
}Шаг 2. Добавляем отображение метки в админке заказов
Чтобы видеть метку в списке заказов, используем фильтр manage_edit-shop_order_columns и экшен manage_shop_order_posts_custom_column:
add_filter('manage_edit-shop_order_columns', 'add_custom_order_label_column');
function add_custom_order_label_column($columns) {
$columns['custom_payment_label'] = 'Метка оплаты';
return $columns;
}
add_action('manage_shop_order_posts_custom_column', 'show_custom_order_label_column', 10, 2);
function show_custom_order_label_column($column, $post_id) {
if ($column === 'custom_payment_label') {
$order = wc_get_order($post_id);
$label = $order->get_meta('_custom_payment_label');
echo esc_html($label ? $label : '-');
}
}Проверка результата после внедрения
- Создайте тестовый заказ и оплатите его через доступные способы.
- Перейдите в админку WooCommerce → Заказы и убедитесь, что в списке у заказа появилась колонка «Метка оплаты» с текстом «Оплачен».
- Проверьте почту администратора — должно прийти уведомление о смене статуса.
- В случае проблем включите WP_DEBUG и проверьте логи ошибок.
Частые ошибки и как их исправить
- Хук не срабатывает: возможно, статус не меняется на нужный или событие происходит не в том месте. Проверьте правильность статуса и используйте отладочные инструменты.
- Письма не отправляются: убедитесь, что wp_mail настроена и сервер поддерживает отправку почты. Для теста можно использовать плагин WP Mail Logging.
- Метаданные не сохраняются: вызов
$order->save()обязателен после изменения метаданных. - Ошибка доступа к объекту $order: проверьте, что ID передается и объект создается через
wc_get_order.
Практические советы по безопасности и производительности
- Храните пользовательские данные в метаполях заказов с уникальными ключами, чтобы избежать конфликтов.
- Проверяйте входящие данные и используйте функции экранирования при выводе, например,
esc_html(). - В тяжелых автоматизациях используйте асинхронные задачи — можно интегрировать с WP-Cron или внешними очередями, чтобы не замедлять отклик сайта.
- Для массовых операций лучше использовать специализированные сервисы интеграции с WooCommerce через REST API.
Таблица сравнения методов автоматизации заказов в WooCommerce
| Метод | Плюсы | Минусы | Пример использования |
|---|---|---|---|
| Хуки (actions, filters) | Гибкие, встроенные, не требуют внешних сервисов | Требуют программирования, могут конфликтовать с плагинами | Автоматическое изменение статуса заказа, отправка уведомлений |
| REST API WooCommerce | Подходит для интеграций с внешними системами, масштабируемость | Сложнее в настройке, требует знаний API и авторизации | Синхронизация заказов с CRM, ERP |
| Плагины автоматизации | Удобство, готовые решения, не нужно кодить | Снижение производительности, ограниченная кастомизация | Плагины для автосмены статусов, уведомлений |