WooCommerce new order action – get order information

I am using this to create a new function in my functions.php file

add_action( 'woocommerce_new_order', 'create_invoice_for_wc_order',  1, 1  );
function create_invoice_for_wc_order() {

}

it is to execute some custom code when a new order is placed, how can i get the order information (ordered products etc) inside my function

Here is Solutions:

We have many solutions to this problem, But we recommend you to use the first solution because it is tested & true solution that will 100% work for you.

Solution 1

You can use $order_id as a parameter for your woocommerce_new_order callback and get the order details from the $order_id.

Example:

// define the woocommerce_new_order callback 
function create_invoice_for_wc_order( $order_id ) { 
    // get order details data...
    $order = new WC_Order( $order_id );
    var_dump($order);
}; 

References:

http://hookr.io/actions/woocommerce_new_order/

https://docs.woothemes.com/wc-apidocs/class-WC_Order.html

Solution 2

woocommerce_new_order includes an $order_id parameter. You can use it in your callback:

add_action( 'woocommerce_new_order', 'create_invoice_for_wc_order',  1, 1  );
function create_invoice_for_wc_order( $order_id ) {
    $order = new WC_Order( $order_id );
    $items = $order->get_items();
    // etc...
}

Solution 3

All answers here are correct but if you need the line items the above wont work since line items can’t be fetched with new WC_Order at that time.

The hook now has a second $order parameter that will work.

add_action( 'woocommerce_new_order', 'create_invoice_for_wc_order',  1, 2  );
function create_invoice_for_wc_order( $order_id, $order ) {
    $items = $order->get_items();
    // etc...
}

Solution 4

If you want to get only the order details, You can use ‘woocommerce_new_order’ hook and $order_id as parameter

add_action( 'woocommerce_new_order', 'create_invoice_for_wc_order',  1, 1  );
function create_invoice_for_wc_order($order_id) {
$order = new WC_Order( $order_id );
print_r($order);
//your code
}

But if You want to get order items You should use ‘woocommerce_checkout_order_processed’

add_action( 'woocommerce_checkout_order_processed', 'create_invoice_for_wc_order',  1, 1  );
function create_invoice_for_wc_order($order_id) {
$order = new WC_Order( $order_id );
//order items
$items = $order->get_items();
print_r($items);
}

Note: Use and implement solution 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply