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

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


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


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.


Having tried $customer = new WC_Customer(); and global $woocommerce; $customer = $woocommerce->customer; I was still getting empty address data even when I logged in as a non-admin user.

My solution was as follows:

function mwe_get_formatted_shipping_name_and_address($user_id) {    $address = '';    $address .= get_user_meta( $user_id, 'shipping_first_name', true );    $address .= ' ';    $address .= get_user_meta( $user_id, 'shipping_last_name', true );    $address .= "\n";    $address .= get_user_meta( $user_id, 'shipping_company', true );    $address .= "\n";    $address .= get_user_meta( $user_id, 'shipping_address_1', true );    $address .= "\n";    $address .= get_user_meta( $user_id, 'shipping_address_2', true );    $address .= "\n";    $address .= get_user_meta( $user_id, 'shipping_city', true );    $address .= "\n";    $address .= get_user_meta( $user_id, 'shipping_state', true );    $address .= "\n";    $address .= get_user_meta( $user_id, 'shipping_postcode', true );    $address .= "\n";    $address .= get_user_meta( $user_id, 'shipping_country', true );    return $address;}

...and this code works regardless of whether you are logged in as admin or not.