在WooCommerce 3中获取订单商品和WC_Order_Item_Product [英] Get Order items and WC_Order_Item_Product in WooCommerce 3

查看:79
本文介绍了在WooCommerce 3中获取订单商品和WC_Order_Item_Product的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好吧,继续阅读WooCommerce 3.0+中的更改,看来您再也不能直接访问此类了,所以我认为该代码需要更改,因为它会吐出一个错误:

Ok, reading up on the changes in WooCommerce 3.0+, it seems that you can not access this class directly anymore, so I would assume that this code needs to be changed, since it is spitting out an error:

$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

But, embarrassingly, I'm not sure how to change this code to use the correct new getter and setter functions in the newest version of this class, which no longer has a construct. How to do this properly? I don't see any get function on getting the order item in the same way as the above.
https://docs.woocommerce.com/wc-apidocs/class-WC_Order_Item_Product.html

也许我在这里忽略了什么?

Maybe I am overlooking something here?

推荐答案

如果使用 get_id() 方法,则会在代码中获得 15 的商品ID.

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 product ID:
The correct WC_Order_Item_Product method to get the Product id is: get_product_id()

获取版本ID :
获取产品ID的正确WC_Order_Item_Product方法为: get_variation_id()

Get the variation ID:
The correct WC_Order_Item_Product method to get the Product id is: get_variation_id()

获取订单ID
获取订单ID的正确WC_Order_Item_Product方法为: get_order_id()

Get the order ID
The correct WC_Order_Item_Product method to get the Order id is: get_order_id()

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

Get the WC_Product object
The correct WC_Order_Item_Product method to get WC_Product object is: get_product()

获取WC_Order对象
获取WC_order对象的正确WC_Order_Item_Product方法是: get_order()

Get the WC_Order object
The correct WC_Order_Item_Product method to get WC_order object is: get_order()

使用

Get and unprotecting the data and meta data using WC_Data methods:
get_data()
get_meta_data()

从订单商品ID中获取WC_Product对象:

Get The WC_Product object from the order item ID:

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

// The product ID
$product_id = $item->get_product_id(); 

// The variation ID
$variation_id = $item->get_variation_id(); 

// The WC_Product object
$product = $item->get_product(); 

// The quantity
$quantity = $item->get_quantity(); 

// The order ID
$order_id = $item->get_order_id(); 

// The WC_Order object
$order = $item->get_order(); 

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

// The product name
$product_name = $item->get_name(); // … OR: $product->get_name();

// Get the product SKU (using WC_Product method)
$sku = $product->get_sku();

// Get line item totals (non discounted)
$total     = $item->get_subtotal(); // Total without tax (non discounted)
$total_tax = $item->get_subtotal_tax(); // Total tax (non discounted)

// Get line item totals (discounted when a coupon is applied)
$total     = $item->get_total(); // Total without tax (discounted)
$total_tax = $item->get_total_tax(); // Total tax (discounted)


WC_Order对象 获取订单商品(并使用 WC_product 对象):


Get the order items from the WC_Order object (and use the WC_product Object):

$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 ){
    //Get the product ID
    $product_id = $item->get_product_id();

    //Get the variation ID
    $variation_id = $item->get_variation_id();

    //Get the WC_Product object
    $product = $item->get_product();

    // The quantity
    $quantity = $item->get_quantity();

    // The product name
    $product_name = $item->get_name(); // … OR: $product->get_name();

    //Get the product SKU (using WC_Product method)
    $sku = $product->get_sku();

    // Get line item totals (non discounted)
    $total     = $item->get_subtotal(); // Total without tax (non discounted)
    $total_tax = $item->get_subtotal_tax(); // Total tax (non discounted)

    // Get line item totals (discounted when a coupon is applied)
    $total     = $item->get_total(); // Total without tax (discounted)
    $total_tax = $item->get_total_tax(); // Total tax (discounted)
}


访问数据和自定义元数据:

1)取消保护WC_Order_Item_Product数据和自定义元数据:


Accessing data and custom meta data:

1) unprotecting WC_Order_Item_Product data and custom meta data:

您可以使用所有 WC_Order_Item_Product data 方法,也可以使用 WC_Data 以下方法:

You can use all WC_Order_Item_Product data methods or you can unprotect the data using WC_Data following methods:

$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 ){

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

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

    // Get the specific meta data from a meta_key: 
    $meta_value = $item->get_meta( 'custom_meta_key', true );

    // Get all additional meta data (formatted in an unprotected array)
    $formatted_meta_data = $item->get_formatted_meta_data( ' ', true );


    // Get line item totals (non discounted)
    $total     = $item->get_subtotal(); // Total without tax (non discounted)
    $total_tax = $item->get_subtotal_tax(); // Total tax (non discounted)

    // Get line item totals (discounted when a coupon is applied)
    $total     = $item->get_total(); // Total without tax (discounted)
    $total_tax = $item->get_total_tax(); // Total tax (discounted)
}

2)(为了与旧式阵列向后兼容)仍然可以进行数组访问 直接获取公共数据:

2) The Array Access is still possible (for backwards compatibility with legacy arrays) to get the common data directly:

$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_id    = $item['product_id']; // Get the product ID
    $variation_id  = $item['variation_id']; // Get the variation ID

    $product_name  = $item['name']; // The product name
    $item_qty      = $item['quantity']; // The quantity

    // Get line item totals (non discounted)
    $line_total     = $item['subtotal']; // or $item['line_subtotal'] -- The line item non discounted total
    $line_total_tax = $item['subtotal_tax']; // or $item['line_subtotal_tax'] -- The line item non discounted tax total

    // Get line item totals (discounted)
    $line_total2     = $item['total']; // or $item['line_total'] -- The line item non discounted total
    $line_total_tax2 = $item['total_tax']; // The line item non discounted tax total

    // And so on ……
}


作为参考:


As reference:

  • Get the metadata of an order item in woocommerce 3
  • How to get WooCommerce order details

这篇关于在WooCommerce 3中获取订单商品和WC_Order_Item_Product的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆