对于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 );
基本上,我想复制所有数据,包括从源订单到目的地订单的所有元数据和自定义字段。我已经设法以某种方式复制其他元数据但我无法正确复制带有项目元数据的订单项。
请帮我找出上述功能无效的原因,并指导我在两个订单之间复制订单商品的解决方案。