Как использовать WP хуки для автоматизации обработки заказов WooCommerce

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

Многие владельцы магазинов на WooCommerce сталкиваются с рутинной задачей — ручным обновлением статусов заказов, отправкой уведомлений или изменением свойств товаров после продажи. Это отнимает время и увеличивает риск ошибок. Автоматизация с помощью WordPress хуков позволяет оптимизировать эти процессы.

Пошаговое решение: автоматическое изменение статуса заказа и обновление данных

1. Используем хук woocommerce_order_status_completed для обработки успешно оплаченных заказов

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

add_action('woocommerce_order_status_completed', 'custom_order_completed_action', 10, 1); 
function custom_order_completed_action($order_id) {
    $order = wc_get_order($order_id);
    // Пример: обновляем мета поле заказа
    $order->update_meta_data('_custom_processed', 'yes');
    $order->save();
    
    // Отправляем кастомное письмо
    $to = $order->get_billing_email();
    $subject = 'Ваш заказ обработан';
    $message = 'Спасибо за покупку! Ваш заказ #' . $order_id . ' завершен.';
    wp_mail($to, $subject, $message);
}

2. Автоматическое изменение стоимости товара после продажи

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

add_action('woocommerce_order_status_completed', 'custom_update_product_price_after_sale', 10, 1);
function custom_update_product_price_after_sale($order_id) {
    $order = wc_get_order($order_id);
    foreach ($order->get_items() as $item) {
        $product = $item->get_product();
        if (!$product || $product->is_type('variable')) continue; // пропускаем вариативные
        $old_price = floatval($product->get_regular_price());
        $new_price = max($old_price - 10, 0); // уменьшаем цену на 10, не ниже 0
        $product->set_regular_price($new_price);
        $product->save();
    }
}

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

  • Создайте тестовый заказ и переведите его в статус "завершен" через админку WooCommerce.
  • Проверьте, что после изменения статуса:
    • мета поле _custom_processed у заказа установлено в "yes" (через phpMyAdmin или через get_post_meta);
    • на email покупателя пришло кастомное письмо;
    • цены товаров, участвовавших в заказе, уменьшились на 10 единиц (проверьте в карточках товаров).

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

  • Хук не срабатывает: возможно, статус заказа не был изменен на "completed", а до него оставался "processing". Убедитесь, что именно woocommerce_order_status_completed подходит для вашей логики.
  • Письмо не отправляется: проверьте настройки почты на сервере и корректность email покупателя.
  • Цена товара не обновляется: убедитесь, что товары не вариативные, и что у них есть установленная регулярная цена. Также проверьте права на запись в базу данных.

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

  • Для массовых изменений цен используйте транзакции или временное отключение кэша, чтобы избежать рассинхронизации.
  • Избегайте тяжелых операций в хуках, используйте WP-Cron для отложенной обработки, если операций много.
  • Проверяйте корректность получаемых данных заказа, чтобы не допустить ошибок и исключений.
  • Используйте nonce и проверки прав доступа, если добавляете обработчики с пользовательским вводом.

Сравнение способов автоматизации заказов WooCommerce

МетодПлюсыМинусыПример
Хуки WooCommerceНативно, быстро, гибкоТребует навыков PHP, можно нагружать сайтwoocommerce_order_status_completed
Плагины автоматизацииПростота внедрения, визуальный интерфейсМожет быть дорогим и нагружать сайтAutomateWoo, WooCommerce Follow-ups
Внешние сервисы через APIМощные возможности интеграцииСложность настройки, задержкиZapier, Integromat
WooCommerce: автоматическое отключение платежей при ошибках биллинга
30.05.2026
Автоматическая замена контента в WordPress: практическое решение с использованием WPRemark
15.04.2026
Как создать автозаполняемый формат даты в WordPress с примером кода
04.04.2026
WooCommerce: как автоматически удалять заказы после их архивирования
18.05.2026
WooCommerce: как автоматически удалять товары после продажи
22.05.2026