kris
kris

Reputation: 12620

WooCommerce codex : how to set the user/customer on an order

I am writing a WooCommerce Plugin that takes care of payment and delivery.
Right now I am at the point of creating an order based on the current shopping cart.
That all works fine getting the items and costs correct, the only problem is that the order shows as being made by "Guest", instead of by the currently logged on user (even though the correct email address for that user is on the order).

Here is my code :

    $cart = WC()->cart;
    $checkout = WC()->checkout();
    $order_id = $checkout->create_order();
    $order = wc_get_order( $order_id );
    $order->user_id = apply_filters( 'woocommerce_checkout_customer_id', get_current_user_id() );
    $order->calculate_totals();
    $order->payment_complete(); 
    $cart->empty_cart();

Here is what I see in the backend after running this :

enter image description here


Why is the order placed as "Guest" instead of the user that placed the order?
And how do I get to have the correct user attached?

Upvotes: 7

Views: 10091

Answers (2)

Vidish Purohit
Vidish Purohit

Reputation: 1078

You will need to add _customer_user to post_meta table with order ID and meta value should be the user ID which you want to link to this order.

I hope that this will help you:

update_post_meta($order_id, '_customer_user', get_current_user_id());

Now, as we the answer is 6 years old - woocommerce has added class for this lately. You can do it like this now:

$order = wc_get_order( $order_id );
$order->set_customer_id(get_current_user_id());

Upvotes: 17

Shameem Ali
Shameem Ali

Reputation: 181

OR

use user/customer id(create a customer/user before place order) in wc_create_order();

eg: $order = wc_create_order(array('customer_id' => $user));

this code fine for me!

Upvotes: 6

Related Questions