Since Woocommerce mega major Update 3.0+ things have changed quite a lot:
For WC_Order Object, properties can’t be accessed directly anymore as before and will throw some errors.
New WC_Order and WC_Abstract_Order getter and setter methods are now required on the WC_Order object instance.
Also, there are some New classes for Order items:
WC_Order_Item class,
WC_Order_Item_Product class,
WC_Order_Item_Tax class,
WC_Order_Item_Shipping class,
WC_Order_Item_Coupon class,
WC_Order_Item_Fee class.
Additionally, WC_Data Abstract class allow to access Order and order items data using **get_data(), get_meta_data() and get_meta() **methods.
Using some WC_Order and WC_Abstract_Order methods (example):
// Get an instance of the WC_Order object (same as before)
order = wc_get_order(order_id );
order_id =order->get_id(); // Get the order ID
parent_id =order->get_parent_id(); // Get the parent order ID (for subscriptions…)
user_id =order->get_user_id(); // Get the costumer ID
user =order->get_user(); // Get the WP_User object
order_status =order->get_status(); // Get the order status (see the conditional method has_status() below)
currency =order->get_currency(); // Get the currency used
payment_method =order->get_payment_method(); // Get the payment method ID
payment_title =order->get_payment_method_title(); // Get the payment method title
date_created =order->get_date_created(); // Get date created (WC_DateTime object)
date_modified =order->get_date_modified(); // Get date modified (WC_DateTime object)
billing_country =order->get_billing_country(); // Customer billing country
if ( $order->has_status('completed') ) {
// Do something
}
// Get an instance of the WC_Order object
order = wc_get_order(order_id );
order_data =order->get_data(); // The Order data
order_id =order_data['id'];
order_parent_id =order_data['parent_id'];
order_status =order_data['status'];
order_currency =order_data['currency'];
order_version =order_data['version'];
order_payment_method =order_data['payment_method'];
order_payment_method_title =order_data['payment_method_title'];
order_payment_method =order_data['payment_method'];
order_payment_method =order_data['payment_method'];
## Creation and modified WC_DateTime Object date string ##
// Using a formated date ( with php date() function as method)
order_date_created =order_data['date_created']->date('Y-m-d H:i:s');
order_date_modified =order_data['date_modified']->date('Y-m-d H:i:s');
// Using a timestamp ( with php getTimestamp() function as method)
order_timestamp_created =order_data['date_created']->getTimestamp();
order_timestamp_modified =order_data['date_modified']->getTimestamp();
order_discount_total =order_data['discount_total'];
order_discount_tax =order_data['discount_tax'];
order_shipping_total =order_data['shipping_total'];
order_shipping_tax =order_data['shipping_tax'];
order_total =order_data['total'];
order_total_tax =order_data['total_tax'];
order_customer_id =order_data['customer_id']; // ... and so on
## BILLING INFORMATION:
order_billing_first_name =order_data['billing']['first_name'];
order_billing_last_name =order_data['billing']['last_name'];
order_billing_company =order_data['billing']['company'];
order_billing_address_1 =order_data['billing']['address_1'];
order_billing_address_2 =order_data['billing']['address_2'];
order_billing_city =order_data['billing']['city'];
order_billing_state =order_data['billing']['state'];
order_billing_postcode =order_data['billing']['postcode'];
order_billing_country =order_data['billing']['country'];
order_billing_email =order_data['billing']['email'];
order_billing_phone =order_data['billing']['phone'];
## SHIPPING INFORMATION:
order_shipping_first_name =order_data['shipping']['first_name'];
order_shipping_last_name =order_data['shipping']['last_name'];
order_shipping_company =order_data['shipping']['company'];
order_shipping_address_1 =order_data['shipping']['address_1'];
order_shipping_address_2 =order_data['shipping']['address_2'];
order_shipping_city =order_data['shipping']['city'];
order_shipping_state =order_data['shipping']['state'];
order_shipping_postcode =order_data['shipping']['postcode'];
order_shipping_country =order_data['shipping']['country'];
if ( order->has_status('completed') ) {
// Get an instance of the WC_Order objectorder = wc_get_order(order_id);
// Iterating through each WC_Order_Item_Product objects
foreach (order->get_items() as item_key =>item ):
## Using WC_Order_Item methods ##
// Item ID is directly accessible from the item_key in the foreach loop oritem_id = item->get_id();
## Using WC_Order_Item_Product methods ##product = item->get_product(); // Get the WC_Product objectproduct_id = item->get_product_id(); // the Product idvariation_id = item->get_variation_id(); // the Variation iditem_type = item->get_type(); // Type of the order item ("line_item")item_name = item->get_name(); // Name of the productquantity = item->get_quantity();tax_class = item->get_tax_class();line_subtotal = item->get_subtotal(); // Line subtotal (non discounted)line_subtotal_tax = item->get_subtotal_tax(); // Line subtotal tax (non discounted)line_total = item->get_total(); // Line total (discounted)line_total_tax = item->get_total_tax(); // Line total tax (discounted)
## Access Order Items data properties (in an array of values) ##item_data = item->get_data();product_name = item_data['name'];product_id = item_data['product_id'];variation_id = item_data['variation_id'];quantity = item_data['quantity'];tax_class = item_data['tax_class'];line_subtotal = item_data['subtotal'];line_subtotal_tax = item_data['subtotal_tax'];line_total = item_data['total'];line_total_tax = item_data['total_tax'];
// Get data from The WC_product object using methods (examples)product = item->get_product(); // Get the WC_Product objectproduct_type = product->get_type();product_sku = product->get_sku();product_price = product->get_price();stock_quantity = $product->get_stock_quantity();
endforeach;
}
SOURCE: https://stackoverflow.com/questions/39401393/how-to-get-woocommerce-order-details