2017-08-16 74 views
4

好吧,仔细阅读Woocommerce 3.0+中的更改,似乎您不能直接访问此类,所以我会认为此代码需要更改,因为它是吐出一个错误:获取Woocommerce中的订单商品和WC_Order_Item_Product 3

$order_item_id = 15; 
$order_item = new WC_Order_Item_Product($order_item_id); 
$return = $order_item->get_id() ? $order_item : false; 

不过,令人尴尬的是我不知道如何更改此代码以使用正确的新的getter和setter函数在这个类的最新版本,它不再拥有结构。如何正确地做到这一点?我没有看到任何get函数获取订单项目的方式与上述相同。
https://docs.woocommerce.com/wc-apidocs/class-WC_Order_Item_Product.html

也许我在这里忽略了一些东西?

回答

5

If you use the get_id() method, you get your item ID which is 15 in your code.

获得订单ID获取产品ID:
正确WC_Order_Item_Product方法来获取产品编号为:get_product_id()

Get the or DER ID
正确WC_Order_Item_Product方法来获取订单ID是:get_order_id()

获取WC_Product对象
正确WC_Order_Item_Product方法来获得WC_Product对象是: get_product()

获取WC_Order对象
正确的WC_Order_ Item_Product方法来获得WC_order对象是: get_order()

获取和使用WC_Data方法取消保护数据和元数据
get_data()
get_meta_data()


得到w^C_Product对象:

$order_item_id = 15; 
$order_item = new WC_Order_Item_Product($order_item_id); 

// The product ID 
$product_id = $order_item->get_product_id(); 
// The order ID 
$order_id = $order_item->get_order_id(); 

// The WC_Product object 
$product = $order_item->get_product(); 
// The WC_Order object 
$order = $order_item->get_order(); 

// The item ID 
$item_id = $order_item->get_id(); // which is your $order_item_id 

获取从WC_Order对象的订单项目:

$order_id = 156; // The order_id 

// get an instance of the WC_Order object 
$order = wc_get_order($order_id); 

// The loop to get the order items which are WC_Order_Item_Product objects since WC 3+ 
foreach($order->get_items() as $item_id => $item_product){ 
    //Get the product ID 
    $item_product->get_product_id(); 
    //Get the WC_Product object 
    $item_product->get_product(); 
} 

访问和不受保护的WC_Order_Item_Product数据:

你可以使用所有WC_Order_Item_Product data方法,也可以取消保护使用WC_Data以下方法中的数据:

$order_id = 156; // The order_id 

// get an instance of the WC_Order object 
$order = wc_get_order($order_id); 

// The loop to get the order items which are WC_Order_Item_Product objects since WC 3+ 
foreach($order->get_items() as $item_id => $item_product){ 

    // Get the common data in an array: 
    $item_product_data_array = $item_product->get_data(); 

    // Get the special meta data in an array: 
    $item_product_meta_data_array = $item_product->get_meta_data(); 
} 

参考:How to get WooCommerce order details

+0

我不确定这是做什么。我正在调用'get_id()',我真的不知道这是产品ID还是其他对象ID。如果有的话,你可以精心研究差异吗? –

+0

好吧,你似乎正在返回产品ID,但我相信我需要返回的对象,而不是ID ...'get_id()'只是检查它是否有一个ID,但对象被返回而不是产品ID。基本上,我不确定是否可以在此上下文中使用'get_id()'。也许这很好,我不知道,但我得到一个PHP通知,说'wc_deprecated_function' –

+0

谢谢,这是很好的信息。非常感谢! –

1

WC_Order_Item_Product从WC_Order_Item,这get_order_id()继承,所以你可以

$order_item->get_order_id(); 
+0

是'get_order_id()'返回一样'get_id()'。哦,谢谢,我出于某种原因忽略了继承的类。 'get_id()'来自'WC_Data',我认为它与来自'WC_Order_Item'类的'get_order_id()'有不同的值...... –

+0

对,我误解了你的问题。答案几乎是一样的,尽管如你所见,get_id()方法也是从WC_Data继承的。你遇到了什么错误? – ishegg