Get refunded orders and refunded order items details in Woocommerce 3

前端 未结 2 982
心在旅途
心在旅途 2020-12-07 02:54

I see when I look at an order it will show the specific item that was refunded if the whole order wasn\'t.

Is there a way to find using the WC_Order_Item_Prod

相关标签:
2条回答
  • 2020-12-07 03:03

    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.
    
    0 讨论(0)
  • 2020-12-07 03:09

    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 method get_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 array
    foreach( $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 items
    foreach( $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:

    • How to get WooCommerce order details
    • Get Order items and WC_Order_Item_Product in WooCommerce 3
    • Woocommerce - Getting the order item price and quantity.
    0 讨论(0)
提交回复
热议问题