Как создать собственный скрипт для автоприставки заказов WooCommerce

В WooCommerce часто возникает задача автоматически прикреплять определённые товары или услуги к заказу в зависимости от его содержимого или статуса. Такая функциональность помогает улучшить пользовательский опыт и оптимизировать процесс обработки заказов. В этой статье мы подробно разберём, как создать собственный скрипт для автоприставки товаров к заказам WooCommerce с примерами кода и полезными советами.

Что такое автоприставка заказов и зачем она нужна

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

WooCommerce не имеет встроенной поддержки такой функциональности, поэтому нам придётся реализовать её самостоятельно с помощью хуков и кастомного кода.

Основные сценарии применения автоприставки заказов:

  • Добавление сопутствующих товаров при заказе конкретного продукта.
  • Автоматическое добавление сервисных услуг к заказам в определённом статусе.
  • Присвоение бесплатных бонусов при достижении определённой суммы заказа.

Выбор хуков для реализации автоприставки товаров

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

Рассмотрим основные хуки, которые подойдут для нашей задачи:

  • woocommerce_checkout_create_order — срабатывает в момент создания заказа после оформления корзины, но до сохранения в базу. Здесь можно добавить товары в объект заказа.
  • woocommerce_order_status_changed — срабатывает при изменении статуса заказа. Подходит, если нужно добавлять товары после смены статуса, например, на "обработка".
  • woocommerce_before_calculate_totals — срабатывает при пересчёте стоимости корзины. Используется для динамического добавления товаров в корзину до оформления заказа.

Для автоприставки уже после создания заказа рекомендуем использовать woocommerce_order_status_changed, а для добавления при оформлении — woocommerce_checkout_create_order или woocommerce_before_calculate_totals.

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

Реализуем функцию, которая при переходе заказа в статус "processing" автоматически добавит подарок — товар с ID 1234.

add_action('woocommerce_order_status_changed', 'wporders_autopristavka_add_gift_on_processing', 10, 4);
function wporders_autopristavka_add_gift_on_processing($order_id, $old_status, $new_status, $order) {
    if ($new_status !== 'processing') return;

    $gift_product_id = 1234; // ID подарочного товара

    // Проверяем, есть ли уже подарок в заказе
    foreach ($order->get_items() as $item) {
        if ($item->get_product_id() == $gift_product_id) {
            return; // Подарок уже добавлен
        }
    }

    // Добавляем подарок к заказу
    $item = new WC_Order_Item_Product();
    $item->set_product_id($gift_product_id);
    $item->set_quantity(1);
    $item->set_total(0); // Бесплатно
    $item->set_subtotal(0);
    $order->add_item($item);
    $order->calculate_totals();
    $order->save();
}

Данный код добавляет бесплатный товар к заказу при смене статуса на "processing". Обратите внимание, что после добавления товара мы пересчитываем итог и сохраняем заказ.

Автоматическое добавление сопутствующего товара при оформлении заказа

Если нужно добавить сопутствующий товар ещё во время оформления заказа, например, при наличии в корзине определённого товара, можно использовать хук woocommerce_checkout_create_order. Пример:

add_action('woocommerce_checkout_create_order', 'wporders_add_related_product_to_order', 20, 2);
function wporders_add_related_product_to_order($order, $data) {
    $related_product_id = 5678; // ID сопутствующего товара
    $trigger_product_id = 8765; // ID товара-триггера

    $has_trigger_product = false;
    foreach (WC()->cart->get_cart() as $cart_item) {
        if ($cart_item['product_id'] == $trigger_product_id) {
            $has_trigger_product = true;
            break;
        }
    }

    if (!$has_trigger_product) return;

    // Добавляем сопутствующий товар
    $item = new WC_Order_Item_Product();
    $item->set_product_id($related_product_id);
    $item->set_quantity(1);
    $item->set_total(0); // Бесплатно
    $item->set_subtotal(0);
    $order->add_item($item);
}

Такой способ позволяет динамично добавлять товары при оформлении заказа, основываясь на содержимом корзины.

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

Чтобы скрипт работал корректно и не создавал проблем с заказами, обратите внимание на следующие моменты:

  • Проверяйте наличие уже добавленных товаров, чтобы не дублировать их.
  • При добавлении бесплатных товаров явно указывайте цену 0, чтобы не возникало конфликтов с общей суммой заказа.
  • Обязательно вызывайте $order->calculate_totals() после внесения изменений в заказ.
  • Тестируйте скрипт на тестовой копии сайта, чтобы избежать ошибок в рабочей базе.
  • Для сложных условий используйте дополнительные проверки по метаданным или статусам товара.

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

Если вы хотите реализовать автоприставку без программирования или дополнить свой скрипт, обратите внимание на следующие плагины:

  • Woo Autocomplete Orders — автоматизация обработки заказов, полезна для быстрого перехода в нужный статус и запуска автоприставок.
  • Clearfy Pro — набор инструментов для оптимизации WooCommerce, включая расширенные возможности для кастомизации заказов.

Эти инструменты могут существенно упростить настройку и расширить функциональность вашего интернет-магазина на WooCommerce.

Добавление оценок и отзывов к заказам WooCommerce с примерами кода
01.03.2026
Создание автоматических уведомлений о статусах заказов WooCommerce
24.12.2025
Как сделать автоматическое сохранение заказов в WordPress без WooCommerce
23.01.2026
Автопродолжение заказов в WooCommerce: пошаговое руководство
07.11.2025
Оптимизация заказов в WordPress WooCommerce: практические советы и примеры кода
01.11.2025