Как обновить количество позиций заказа WooCommerce - PullRequest
2 голосов
/ 10 апреля 2019

Мне нужно обновить мета элемента заказа в woocommerce oder на странице оформления заказа или пока woocommerce создает заказ.Я использую плагин визуальный конфигуратор продукта , и он не передает нужное количество некоторых позиций заказа в метаданные заказа woocommerce, особенно когда я использую несколько вариантов одного и того же продукта.

Есть ли у меня крючок для меня, чтобы обновить количество товара для определенной позиции заказа и как я могу его использовать?Плагин возвращает мне массив со всей информацией о корзине, и я могу только проверить, появляется ли элемент заказа несколько раз - если да, мне нужно изменить количество этого элемента на это число в заказе / базе данных woocommerce.

Я думал добавить следующий хук в мои functions.php

add_action('woocommerce_checkout_create_order', 'change_qty', 1,1);


function change_qty($item_qty){

  foreach($item_qty as $qty) {
    $qty['product_id'] = $id;
    $qty['qty'] = $new_qty
    $order->update_meta_data('quantity', $new_qty, $id)
  }
}

Принимая во внимание, что $ item_qty - это многомерный массив, содержащий item_ids и скорректированные количества.

Другая проблемаЯ сталкиваюсь с тем, что я не знаю, когда мне нужно вызвать эту функцию, потому что я получаю массив из плагина на странице оформления заказа, но я думаю, что WooCommerce еще не создал заказ в тот момент?

результат должен быть скорректированным количеством товара в сводке по заказу woocommerce в бэкэнде.

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

Чтобы обновить количество позиций заказа, вы можете использовать WC_Order_Item_Product set_quantity() метод .

Правильный крюк для обновления позиций заказа (позиций) - woocommerce_checkout_create_order_line_item action hook , который запускается во время создания заказа перед сохранением данных в базе данных.

add_action('woocommerce_checkout_create_order_line_item', 'change_order_line_item_quantity', 10, 4 );
function change_order_line_item_quantity( $item, $cart_item_key, $cart_item, $order ) {
    // Your code goes below

    // Get order item quantity
    $quantity = $item->get_quantity();

    $new_qty = $quantity + 2;

    // Update order item quantity
    $item->set_quantity( $new_qty );
}

Аргументы функции (переменные) определены и могут использоваться:

  • $item - это WC_Order_Item_Product объект (еще не сохранен в базе данных)
  • $cart_item_key - это связанный ключ элемента корзины
  • $cart_item - это связанный элемент корзины
  • $order - это объект WC_Order (еще не сохранен в базе данных)

Связанный:

0 голосов
/ 10 апреля 2019

Это может помочь вам (мы подключаем уведомление о завершении платежа от поставщика платежа). Если вы хотите обновить _qty сразу после создания заказа, я могу изменить свою функцию. Но сейчас я обновлю его только после успешного платежа.

/**
 * Update order item qty after payment successful
 */
add_filter( 'woocommerce_payment_complete_order_status', 'update_order_item_qty', 10, 2 );
function update_order_item_qty( $order_status, $order_id ) {

    //Get the order and items
    $order = new WC_Order( $order_id );
    $items = $order->get_items();

    //New qty
    $new_qty = 0;

    foreach ( $items as $item_id => $item_data ) {
        update_meta_data( '_qty', $new_qty, $item_id );
    }
}

Пожалуйста, попробуйте, если это то, что вы ищете.

...