Копировать позиции заказа с метаданными между заказами - Woocommerce

Для некоторых пользовательских функций в Woocommerce мне нужно программно копировать позиции заказа со всеми метаданными из одного заказа в другой. Исходный заказ имеет тип WC_Order в то время как тип заказа назначения WC_Subscription который расширяется WC_Order и является заказным типом заказа.

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

function wc_copy_order_items( $from_order, $to_order ) {
    if ( ! is_a( $from_order, 'WC_Abstract_Order' ) || ! is_a( $to_order, 'WC_Abstract_Order' ) ) {
        throw new InvalidArgumentException( _x( 'Invalid data. Orders expected aren\'t orders.', 'In wc_copy_order_items error message. Refers to origin and target order objects.', 'woocommerce-subscriptions' ) );
    }

    $from_order_all_items = $from_order->get_items( array( 'line_item', 'fee', 'shipping' ) );
    foreach( $from_order_all_items as $item ) {
        $to_order->add_item( $item );
    }

    $to_order->save();
}

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

wc_save_order_items( $source_order_id, $_POST );

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

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

0 ответов

Другие вопросы по тегам