Querying WooCommerce orders
I recently discovered WC_Order_Query, which is essentially WooCommerce’s version of WP_Query but specifically for orders.
Here’s an example of how to query completed orders by date:
| <?php | |
| $args = array( | |
| 'limit' => 9999, | |
| 'return' => 'ids', | |
| 'date_completed' => '2018-10-01...2018-10-10', | |
| 'status' => 'completed' | |
| ); | |
| $query = new WC_Order_Query( $args ); | |
| $orders = $query->get_orders(); | |
| foreach( $orders as $order_id ) { | |
| // ... | |
| } |
It follows a similar structure to WP_Query. Note that I’ve just requested the IDs, in order to make the query a lot lighter, and the very neat and easy way to query between dates. There is a fuller list of parameters on the WooCommerce Github wiki page.
Get customer details from a WooCommerce order
Once you’ve got your order, you probably want to extract some data. Using the order number, create an $order object, then use get_user_id to obtain the customer’s user ID:
| <?php | |
| $order = wc_get_order( $order_id ); | |
| $customer_id = $order->get_user_id(); |
Get billing details from WooCommerce order
If you want to grab useful information like the customer’s email, phone number, name, address, etc, you can do it just using the $order object:
| <?php | |
| $order = wc_get_order( $order_id ); | |
| echo $order->get_billing_email(); | |
| echo $order->get_billing_first_name(); | |
| echo $order->get_billing_last_name(); | |
| echo $order->get_billing_address_1(); | |
| echo $order->get_billing_address_2(); | |
| echo $order->get_billing_postcode(); | |
| echo $order->get_billing_state(); | |
| echo $order->get_billing_country(); | |
| echo $order->get_billing_phone(); |
As you can see, WooCommerce has a load of simple methods to return useful customer information.