Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I get customer details from an order in WooCommerce?

I have a function that does this:

$order = new WC_Order($order_id); $customer = new WC_Customer($order_id); 

How can I get customer details from this?

I have tried everything in the documentation, but somehow, just some details are present, but the rest aren't. For example.

$data['Address'] = $customer->get_address() . ' ' . $customer->get_address_2(); $data['ZipCode'] = $customer->get_postcode(); 

Is empty.

Doing

var_dump($customer) 

Produces:

object(WC_Customer)#654 (2) { ["_data":protected]=> array(14) { ["country"]=> string(2) "IT" >["state"]=> string(0) "" ["postcode"]=> string(0) "" ["city"]=> string(0) "" ["address"]=> >string(0) "" ["address_2"]=> string(0) "" ["shipping_country"]=> string(2) "IT" ["shipping_state"]=> string(2) "BG" ["shipping_postcode"]=> string(0) "" ["shipping_city"]=> >string(0) "" ["shipping_address"]=> string(0) "" ["shipping_address_2"]=> string(0) "" ["is_vat_exempt"]=> bool(false) ["calculated_shipping"]=> bool(false) } ? ["_changed":"WC_Customer":private]=> bool(false) }

As you can see, the city is present, but the rest are empty. I have checked in wp_usermeta database table and in the administrator panel of the customer and all the data is there.

like image 260
Alfonso Embid-Desmet Avatar asked Apr 03 '14 16:04

Alfonso Embid-Desmet


People also ask

Does WooCommerce store customer data?

WooCommerce uses a combination of both WordPress database tables and its own custom tables to store its data. However, WooCommerce doesn't have a dedicated table to store the customer data. The customer data is stored in different database tables, which sometimes might make retrieval of this data challenging.

How do I view customers in WooCommerce?

Usage. To view a customer's browsing history and total lifetime value, go to WooCommerce > Orders and scroll to the Customer Browsing History and Customer Purchase History boxes. Click the Order Number to view the data.

Where is WooCommerce order data stored?

WooCommerce orders are a Custom Post Type so they're located in the wp_posts table.


2 Answers

2017-2020 WooCommerce versions 3+ and CRUD Objects

1). You can use getter methods from WC_Order and WC_Abstract_Order classes on the WC_Order object instance like:

// Get an instance of the WC_Order Object from the Order ID (if required) $order = wc_get_order( $order_id );  // Get the Customer ID (User ID) $customer_id = $order->get_customer_id(); // Or $order->get_user_id();  // Get the WP_User Object instance $user = $order->get_user();  // Get the WP_User roles and capabilities $user_roles = $user->roles;  // Get the Customer billing email $billing_email  = $order->get_billing_email();  // Get the Customer billing phone $billing_phone  = $order->get_billing_phone();  // Customer billing information details $billing_first_name = $order->get_billing_first_name(); $billing_last_name  = $order->get_billing_last_name(); $billing_company    = $order->get_billing_company(); $billing_address_1  = $order->get_billing_address_1(); $billing_address_2  = $order->get_billing_address_2(); $billing_city       = $order->get_billing_city(); $billing_state      = $order->get_billing_state(); $billing_postcode   = $order->get_billing_postcode(); $billing_country    = $order->get_billing_country();  // Customer shipping information details $shipping_first_name = $order->get_shipping_first_name(); $shipping_last_name  = $order->get_shipping_last_name(); $shipping_company    = $order->get_shipping_company(); $shipping_address_1  = $order->get_shipping_address_1(); $shipping_address_2  = $order->get_shipping_address_2(); $shipping_city       = $order->get_shipping_city(); $shipping_state      = $order->get_shipping_state(); $shipping_postcode   = $order->get_shipping_postcode(); $shipping_country    = $order->get_shipping_country(); 

2). You can also use the WC_Order get_data() method, to get an unprotected data array from Order meta data like:

// Get an instance of the WC_Order Object from the Order ID (if required) $order = wc_get_order( $order_id );  // Get the Order meta data in an unprotected array $data  = $order->get_data(); // The Order data  $order_id        = $data['id']; $order_parent_id = $data['parent_id'];  // Get the Customer ID (User ID) $customer_id     = $data['customer_id'];  ## BILLING INFORMATION:  $billing_email      = $data['billing']['email']; $billing_phone      = $order_data['billing']['phone'];  $billing_first_name = $data['billing']['first_name']; $billing_last_name  = $data['billing']['last_name']; $billing_company    = $data['billing']['company']; $billing_address_1  = $data['billing']['address_1']; $billing_address_2  = $data['billing']['address_2']; $billing_city       = $data['billing']['city']; $billing_state      = $data['billing']['state']; $billing_postcode   = $data['billing']['postcode']; $billing_country    = $data['billing']['country'];  ## SHIPPING INFORMATION:  $shipping_first_name = $data['shipping']['first_name']; $shipping_last_name  = $data['shipping']['last_name']; $shipping_company    = $data['shipping']['company']; $shipping_address_1  = $data['shipping']['address_1']; $shipping_address_2  = $data['shipping']['address_2']; $shipping_city       = $data['shipping']['city']; $shipping_state      = $data['shipping']['state']; $shipping_postcode   = $data['shipping']['postcode']; $shipping_country    = $data['shipping']['country']; 

Now to get the user account data (from an Order ID):

1). You can use the methods from WC_Customer Class:

// Get the user ID from an Order ID $user_id = get_post_meta( $order_id, '_customer_user', true );  // Get an instance of the WC_Customer Object from the user ID $customer = new WC_Customer( $user_id );  $username     = $customer->get_username(); // Get username $user_email   = $customer->get_email(); // Get account email $first_name   = $customer->get_first_name(); $last_name    = $customer->get_last_name(); $display_name = $customer->get_display_name();  // Customer billing information details (from account) $billing_first_name = $customer->get_billing_first_name(); $billing_last_name  = $customer->get_billing_last_name(); $billing_company    = $customer->get_billing_company(); $billing_address_1  = $customer->get_billing_address_1(); $billing_address_2  = $customer->get_billing_address_2(); $billing_city       = $customer->get_billing_city(); $billing_state      = $customer->get_billing_state(); $billing_postcode   = $customer->get_billing_postcode(); $billing_country    = $customer->get_billing_country();  // Customer shipping information details (from account) $shipping_first_name = $customer->get_shipping_first_name(); $shipping_last_name  = $customer->get_shipping_last_name(); $shipping_company    = $customer->get_shipping_company(); $shipping_address_1  = $customer->get_shipping_address_1(); $shipping_address_2  = $customer->get_shipping_address_2(); $shipping_city       = $customer->get_shipping_city(); $shipping_state      = $customer->get_shipping_state(); $shipping_postcode   = $customer->get_shipping_postcode(); $shipping_country    = $customer->get_shipping_country(); 

2). The WP_User object (WordPress):

// Get the user ID from an Order ID $user_id = get_post_meta( $order_id, '_customer_user', true );  // Get the WP_User instance Object $user = new WP_User( $user_id );  $username     = $user->username; // Get username $user_email   = $user->email; // Get account email $first_name   = $user->first_name; $last_name    = $user->last_name; $display_name = $user->display_name;  // Customer billing information details (from account) $billing_first_name = $user->billing_first_name; $billing_last_name  = $user->billing_last_name; $billing_company    = $user->billing_company; $billing_address_1  = $user->billing_address_1; $billing_address_2  = $user->billing_address_2; $billing_city       = $user->billing_city; $billing_state      = $user->billing_state; $billing_postcode   = $user->billing_postcode; $billing_country    = $user->billing_country;  // Customer shipping information details (from account) $shipping_first_name = $user->shipping_first_name; $shipping_last_name  = $user->shipping_last_name; $shipping_company    = $user->shipping_company; $shipping_address_1  = $user->shipping_address_1; $shipping_address_2  = $user->shipping_address_2; $shipping_city       = $user->shipping_city; $shipping_state      = $user->shipping_state; $shipping_postcode   = $user->shipping_postcode; $shipping_country    = $user->shipping_country; 

Related: How to get WooCommerce order details

like image 116
LoicTheAztec Avatar answered Sep 21 '22 15:09

LoicTheAztec


If you want customer's details that customer had entered while ordering, then you can use the following code:

$order = new WC_Order($order_id); $billing_address = $order->get_billing_address(); $billing_address_html = $order->get_formatted_billing_address();  // For printing or displaying on the web page $shipping_address = $order->get_shipping_address(); $shipping_address_html = $order->get_formatted_shipping_address(); // For printing or displaying on web page 

Apart from this, $customer = new WC_Customer( $order_id ); can not get you customer details.

First of all, new WC_Customer() doesn't take any arguments.

Secondly, WC_Customer will get customer's details only when the user is logged in and he/she is not on the admin side. Instead he/she should be on website's front-end like the 'My Account', 'Shop', 'Cart', or 'Checkout' page.

like image 37
Ratnakar - StoreApps Avatar answered Sep 21 '22 15:09

Ratnakar - StoreApps