Я тоже думал, что то, что вы делаете, должно работать, но на самом деле это неправильно.Я прочитал исходный код WooCommerce, и вот как это делает WooCommerce.
if ( ! $order = wc_get_order( $order_id ) ) {
return;
}
$order_items = $order->get_items( apply_filters( 'woocommerce_purchase_order_item_types', 'line_item' ) );
Вызов $ order-> get_items () проверит, была ли позиция прочитана из хранилища данных, и прочитает ее, если онаеще не был прочитан.Таким образом, новый WC_Order (52) фактически только частично инициализирует объект заказа.Элементы заказа инициализируются позже, когда к ним осуществляется доступ через заказ.Это может быть более эффективным, поскольку элементы, которые не используются, не будут инициализированы.Обратите внимание, что заказ создается с помощью функции wc_get_order ().Вы должны сделать это вместо нового WC_Order (), так как он использует фабрику для создания заказа.