Использование хука woocommerce_checkout_create_order_line_items для изменения товаров в заказе WooCommerce

Что такое хук woocommerce_checkout_create_order_line_items и когда он нужен

Хук woocommerce_checkout_create_order_line_items вызывается при создании товаров в заказе на этапе оформления. Он позволяет изменить свойства товаров (order items) перед сохранением заказа. Это полезно, если нужно добавить или изменить метаданные товара, изменить цену, количество или внешний вид товара в заказе.

Диагностика задачи: когда применять этот хук

Типичные ситуации, требующие работы с этим хуком:

  • Добавление пользовательских метаданных к товарам в заказе, например, гравировка, персонализация.
  • Изменение цены товара динамически при оформлении заказа.
  • Добавление специальных условий или флагов к товарам заказа для дальнейшей обработки.
  • Удаление или замена товаров в заказе программно.

Если вы пытаетесь изменить товар после сохранения заказа, этот хук — правильное место для вмешательства.

Пошаговое решение: как изменить свойства товаров заказа через хук

Пример: добавим к каждому товару в заказе метаданные с уникальным кодом и изменим цену на 90% от изначальной.

add_action('woocommerce_checkout_create_order_line_items', 'custom_modify_order_line_items', 10, 4);
function custom_modify_order_line_items($order, $cart_item_key, $cart_item, $order_item) {
    // Добавляем метаданные
    $unique_code = 'CODE-' . strtoupper(uniqid());
    $order_item->add_meta_data('unique_code', $unique_code, true);

    // Изменяем цену товара на 90%
    $original_price = $order_item->get_subtotal() / $order_item->get_quantity();
    $new_price = $original_price * 0.9;
    $order_item->set_subtotal($new_price * $order_item->get_quantity());
    $order_item->set_total($new_price * $order_item->get_quantity());
}

Обратите внимание, что $order_item — объект WC_Order_Item_Product, с которым можно работать через методы API WooCommerce.

Параметры функции

  • $order — объект заказа WC_Order.
  • $cart_item_key — ключ товара в корзине.
  • $cart_item — массив с данными товара в корзине.
  • $order_item — объект товара в заказе.

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

Чтобы убедиться, что изменения применились:

  1. Оформите тестовый заказ с одним или несколькими товарами.
  2. В административной панели WooCommerce откройте созданный заказ.
  3. В разделе товаров заказа откройте детали товара и убедитесь, что в метаданных появилась запись unique_code с уникальным значением.
  4. Проверьте, что цена товара в заказе уменьшена на 10% от исходной цены.

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

Частые ошибки при использовании хука и как их исправить

  • Невызов хука: убедитесь, что добавляете функцию с правильным приоритетом и количеством параметров (4).
  • Изменение цены не влияет на итог заказа: используйте методы set_subtotal() и set_total() для изменения стоимости.
  • Метаданные не отображаются: проверьте, что используете метод add_meta_data() с третьим параметром true для обновления.
  • Ошибка при попытке изменить данные вне функции: все изменения нужно делать внутри функции, привязанной к хуку.

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

  • Не добавляйте чрезмерно большие или личные данные в метаданные заказов без необходимости.
  • Избегайте тяжелых и долгих операций в этом хуке — он вызывается при каждом оформлении заказа.
  • Если изменяете цену, учитывайте налоги и скидки, корректно рассчитывайте итоговые суммы.
  • При работе с уникальными кодами используйте uniqid() или более надежные генераторы, чтобы избежать коллизий.

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

МетодПрименениеПлюсыМинусы
Хук woocommerce_checkout_create_order_line_itemsИзменение товара при оформлении заказаГибкость, доступ к объекту заказа и товараТребует знаний API WooCommerce
Хук woocommerce_add_order_item_metaДобавление метаданных после создания заказаПростота, работает после создания заказаМенее гибкий, нельзя менять цену
Плагины кастомизацииДобавление пользовательских полейПростота использованияМогут влиять на производительность и иметь ограничения
Как создать динамический фильтрованный список постов в WordPress с помощью WP_Query
02.02.2026
Как удалить варианты товаров WooCommerce по условию через код
23.05.2026
Как удалить плагин без ошибок в WordPress
20.11.2025
Как добавить нестандартные (вложенные) комментарии в WordPress
09.02.2026
Автоматическое удаление старого контента в WordPress: практическое руководство
30.01.2026