To automatically create a user account after WooCommerce checkout, you can use the woocommerce_thankyou hook. Here’s how you can do it:
Steps to Auto-Create a User After WooCommerce Checkout
- Check if the user is a guest (not logged in).
- Generate a random password.
- Create a new WordPress user.
- Associate the order with the newly created user.
- Send login details to the user.
Code Snippet for functions.php
Add this code to your theme’s functions.php file or a custom plugin:
function auto_create_user_after_checkout( $order_id ) {
if ( !$order_id ) return;
$order = wc_get_order( $order_id );
$email = $order->get_billing_email();
$first_name = $order->get_billing_first_name();
$last_name = $order->get_billing_last_name();
// Check if user already exists
if ( email_exists( $email ) ) return;
// Generate a random password
$password = wp_generate_password();
// Create a new user
$user_id = wp_create_user( $email, $password, $email );
if ( is_wp_error( $user_id ) ) return;
// Update user meta
wp_update_user( array(
'ID' => $user_id,
'first_name' => $first_name,
'last_name' => $last_name,
'role' => 'customer' // Assign WooCommerce customer role
));
// Link order to the new user
$order->set_customer_id( $user_id );
$order->save();
// Send email notification to user
$subject = "Your New Account Details";
$message = "Hello $first_name,\n\n";
$message .= "An account has been created for you on " . get_bloginfo( 'name' ) . ".\n";
$message .= "Here are your login details:\n\n";
$message .= "Username: $email\n";
$message .= "Password: $password\n\n";
$message .= "Login here: " . wp_login_url() . "\n\n";
wp_mail( $email, $subject, $message );
}
add_action( 'woocommerce_thankyou', 'auto_create_user_after_checkout' );
How This Works
✔ Automatically creates a user account if they checkout as a guest.
✔ Links the WooCommerce order to the new user.
✔ Emails login details to the customer.
✔ Assigns the “customer” role to the new account.