Get Order items and WC_Order_Item_Product in WooCommerce 3
If you use the
get_id()
method, you get your item ID which is15
in your code.
Get the product ID:
The correct WC_Order_Item_Product
method to get the Product Id is: get_product_id()
Get the variation ID:
The correct WC_Order_Item_Product
method to get the variation Id is: get_variation_id()
Get the order ID
The correct WC_Order_Item_Product
method to get the Order Id is: get_order_id()
Get the WC_Product object
The correct WC_Order_Item_Product
method to get WC_Product
object is:get_product()
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()
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)
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). Unprotecting WC_Order_Item_Product
data and custom meta 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). 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:
WC_Order_Item_Product inherits from WC_Order_Item, which has get_order_id(), so you can get the Order ID with
$order_item->get_order_id();