Копировать позиции заказа с метаданными между заказами - 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 );
По сути, я хочу скопировать все данные, включая все метаданные и настраиваемые поля, из исходного порядка в целевой. Мне удалось как-то скопировать другие метаданные, но я не могу понять, как правильно копировать элементы заказа с метаданными элемента.
Пожалуйста, помогите мне выяснить, почему вышеупомянутая функция не работает, и укажите, как найти решение для копирования позиций заказа между двумя заказами.