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

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

问题描述

阅读 WooCommerce 3.0 中的更改,似乎无法再直接从订单项目中获取属性,所以我假设需要更改以下代码,因为它会吐出一个错误:

Reading up the changes in WooCommerce 3.0, it seems that is not possible to anymore properties from order items directly, so I would assume that the following 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() 方法,您将获得您的项目 ID,即 15 在您的代码.

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 variation 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()

使用 WC_Data 方法:

  • 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)
}


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


###Accessing data and custom meta data:

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

1). Unprotecting WC_Order_Item_Product data and custom meta data:

您可以使用所有 WC_Order_Item_Product 数据 方法,或者您可以使用 取消保护数据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:

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

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