WC_Order项目为空

时间:2018-06-24 21:39:52

标签: wordpress woocommerce

这很奇怪,我打电话给$order = new WC_Order(52);,我得到了正确的订单对象,但Items数组为空。

任何想法出了什么问题?

我正在使用WooCommerce 3.4.3。

2 个答案:

答案 0 :(得分:1)

我还认为您的工作应该可以,但实际上是错误的。我阅读了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)实际上仅部分初始化了order对象。通过订单访问订单项时,它们将在以后初始化。因为不使用的项目不会被初始化,所以这可能更有效。请注意,订单是使用wc_get_order()函数创建的。您应该这样做,而不要使用新的WC_Order(),因为这会使用工厂来创建订单。

答案 1 :(得分:0)

此处提供的解决方案是正确的。但是,如果您尝试在 woocommerce_new_order 上获取订单项,它不会解决您的问题,因为在触发 woocommerce_new_order 挂钩后将订单项分配给订单。

在我将钩子更改为 woocommerce_checkout_order_processed 后,我才设法对我的问题进行排序:

add_action( 'woocommerce_checkout_order_processed', 'get_order_items_on_checkout', 50, 3 );
function get_order_items_on_checkout($order_id, $posted_data, $order){
   $items = $order->get_items();
}