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.
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.
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.
WooCommerce orders are a Custom Post Type so they're located in the wp_posts table.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With