WooCommerce: как автоматически отключить отгрузку заказа после оплаты

Диагностика проблемы: зачем отключать отгрузку после оплаты в WooCommerce

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

Типичная ситуация — заказ переходит в статус processing (в обработке), что подразумевает необходимость отгрузки, а мы хотим, чтобы после оплаты он переводился сразу в completed или другой статус, не вызывающий уведомления для службы доставки.

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

1. Подключение к хуку изменения статуса заказа

Для изменения статуса заказа сразу после успешной оплаты используем хук woocommerce_payment_complete. Он срабатывает в момент успешного завершения платежа.

2. Пример кода для автоматического перевода заказа в статус "завершён"

add_action('woocommerce_payment_complete', 'auto_complete_order_after_payment');
function auto_complete_order_after_payment($order_id) {
    if (!$order_id) {
        return;
    }

    $order = wc_get_order($order_id);
    if (!$order) {
        return;
    }

    // Проверяем, что заказ ещё не завершён
    if ($order->get_status() !== 'completed') {
        $order->update_status('completed', 'Автоматическое завершение заказа после оплаты.');
    }
}

3. Уточнение условий для разных типов товаров

Если в магазине есть разные категории товаров, и автоматическое завершение нужно только для определённых из них (например, цифровые курсы), следует добавить проверку содержимого заказа:

add_action('woocommerce_payment_complete', 'auto_complete_order_for_digital_products');
function auto_complete_order_for_digital_products($order_id) {
    if (!$order_id) {
        return;
    }

    $order = wc_get_order($order_id);
    if (!$order) {
        return;
    }

    $digital_only = true;
    foreach ($order->get_items() as $item) {
        $product = $item->get_product();
        if ($product && !$product->is_virtual()) {
            $digital_only = false;
            break;
        }
    }

    if ($digital_only && $order->get_status() !== 'completed') {
        $order->update_status('completed', 'Автоматическое завершение заказа с цифровыми товарами.');
    }
}

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

  • Создайте тестовый заказ с товаром, соответствующим условию (виртуальный/цифровой или любой).
  • Оплатите заказ через тестовый платежный шлюз.
  • Перейдите в админку WooCommerce → Заказы и убедитесь, что статус заказа изменился на completed сразу после оплаты.
  • Если условие с цифровыми товарами, проверьте заказ с физическими товарами — статус должен остаться обычным (например, processing).

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

  • Код не срабатывает: проверьте, что код добавлен в файл functions.php активной темы или в специально созданный плагин, и что нет синтаксических ошибок.
  • Статус не меняется для всех заказов: возможно, в магазине настроены дополнительные плагины, которые переопределяют логику обработки статусов — временно отключите их для теста.
  • Заказы с физическими товарами тоже завершаются автоматически: проверьте логику проверки виртуальности товара, возможно, у некоторых физических товаров стоит флажок "виртуальный".
  • Уведомления о заказе не приходят: изменение статуса напрямую влияет на уведомления — при необходимости настройте уведомления в WooCommerce или используйте плагин Clearfy Pro для управления ими.

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

  • Добавляйте код только в дочернюю тему или собственный плагин, чтобы избежать потери при обновлении.
  • Используйте проверку $order и $order_id для предотвращения ошибок PHP.
  • Минимизируйте нагрузку, избегая повторных вызовов update_status при уже нужном статусе.
  • Для массовых заказов используйте WP-CLI для проверки и коррекции статусов, чтобы не нагружать сайт при высокой нагрузке.

Сравнение способов автоматического завершения заказа в WooCommerce

МетодПлюсыМинусыПример использования
Хук woocommerce_payment_complete с кодом Гибкость, контроль по типу товара, лёгкость настройки Требует базовых знаний PHP, может конфликтовать с другими плагинами Код из статьи, проверка виртуальности товаров
Плагины автоматизации статусов (например, WooCommerce Order Status Manager) Удобный интерфейс, расширенные возможности автоматизации Дополнительная нагрузка, лицензия, ограничения бесплатных версий Настройка через админку плагина, без кода
Ручное изменение статусов после оплаты Простота, нет риска ошибок в коде Трудозатратно, неэффективно при большом количестве заказов Открытие каждого заказа и смена статуса вручную
Оптимизация WooCommerce за счёт загрузки изображений по требованию (lazy load)
18.04.2026
Автоматическое удаление записей и метаданных при удалении пользователя в WordPress
22.04.2026
Как создать массивный импорт курсов в WordPress с помощью AJAX и REST API
25.01.2026
WooCommerce: как автоматически отключить отгрузку заказа после оплаты
19.05.2026
Как создать собственный shortcode в WordPress
06.11.2025