首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >空WC_Order项

空WC_Order项
EN

Stack Overflow用户
提问于 2018-06-24 21:39:51
回答 2查看 3.1K关注 0票数 0

这很奇怪,我正在调用$order = new WC_Order(52);,我得到了一个正确的order对象,但是Items数组是空的。

有什么问题吗?

我使用的是WooCommerce 3.4.3。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-26 02:35:14

我也认为你所做的应该是有效的,但实际上它是错误的。我阅读了WooCommerce源代码,WooCommerce就是这样做的。

代码语言:javascript
复制
if ( ! $order = wc_get_order( $order_id ) ) {
    return;
}
$order_items = $order->get_items( apply_filters( 'woocommerce_purchase_order_item_types', 'line_item' ) );

$order->get_ has ()调用将检查行项是否已从数据存储区读取,如果尚未读取,则进行读取。因此,新的WC_Order(52)实际上只是部分初始化order对象。稍后,当通过订单访问订单项时,将初始化订单项。这可能会更有效,因为没有使用的项将不会被初始化。请注意,订单是通过使用wc_get_order()函数创建的。您应该这样做,而不是新的WC_Order(),因为它使用工厂来创建订单。

票数 3
EN

Stack Overflow用户

发布于 2021-02-22 17:01:43

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

只有在将钩子更改为woocommerce_checkout_order_processed之后,我才设法对问题进行排序,如下所示:

代码语言:javascript
复制
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();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51014200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档