Get refunded orders and refunded order items details in Woocommerce 3
To get refunded orders you could use some dedicated WC_Order
methods like the following ones that have Item Id as argument:
$item_qty_refunded = $order->get_qty_refunded_for_item( $item_id ); // Get the refunded amount for a line item.$item_total_refunded = $order->get_total_refunded_for_item( $item_id ); // Get the refunded amount for a line item.
You can access an array WC_Order_Refund
Objects for this order using get_refunds()
method:
- For each refund, you can use the
WC_Order_Refund
methods. - For each refund, you can access items using
WC_Abstract_Order
methodget_items()
that will give you the refunded items for the current Order refund. - Each refund "line" item is a
WC_Order_Item_Product
(with negative values in general) see this related answer: Get Order items and WC_Order_Item_Product in WooCommerce 3
So you can use the following example code:
// Get the WC_Order Object instance (from the order ID)$order = wc_get_order( $order_id );// Get the Order refunds (array of refunds)$order_refunds = $order->get_refunds();// Loop through the order refunds arrayforeach( $order_refunds as $refund ){ // Loop through the order refund line items foreach( $refund->get_items() as $item_id => $item ){ ## --- Using WC_Order_Item_Product methods --- ## $refunded_quantity = $item->get_quantity(); // Quantity: zero or negative integer $refunded_line_subtotal = $item->get_subtotal(); // line subtotal: zero or negative number // ... And so on ... // Get the original refunded item ID $refunded_item_id = $item->get_meta('_refunded_item_id'); // line subtotal: zero or negative number }}
To get the order items discounted values that appear in admin order edit pages you will use the following code:
// Get the WC_Order Object instance (from the order ID)$order = wc_get_order($order_id);// Loop through the order refund line itemsforeach( $order->get_items() as $item_id => $item ){ $line_subtotal = $item->get_subtotal(); $line_total = $item->get_total(); $line_subtotal_tax = $item->get_subtotal_tax(); $line_total_tax = $item->get_total_tax(); // Get the negative discount values $line_discount = $line_total - $line_subtotal; // (Negative number) $line_discount_tax = $line_total_tax - $line_subtotal_tax; // (Negative number)}
Related Answers:
If you are using get_qty_refunded_for_item( $item_id )
or get_total_refunded_for_item( $item_id )
returns 0 use absint()
.
$item_qty_refunded = $order->get_qty_refunded_for_item( $item_id ); // Get the refunded amount for a line item.$item_total_refunded = $order->get_total_refunded_for_item( $item_id ); // Get the refunded amount for a line item.