To prevent users from being logged in directly upon registration in WooCommerce and instead require them to confirm their email first, you can use a plugin or custom code solution. One way to achieve this is by using a plugin like "WooCommerce Email Verification" or by implementing custom code. Here's how you can do it with custom code:
This code should be added to your theme's functions.php file or in a custom plugin. It disables auto-login after registration, sends a confirmation email upon registration, and verifies the email when the user clicks on the verification link. Make sure to customize the email content, subject, and any URLs as per your requirements. Additionally, you may need to adjust the code to fit your specific setup and requirements.
- Disable auto-login after registration: You need to disable the automatic login that WooCommerce performs after user registration.
- Send a confirmation email: You should send a confirmation email to the user upon registration with a unique verification link.
- Verify email upon confirmation: When the user clicks on the verification link, you need to verify their email address before allowing them to log in.
PHP:
// Disable auto-login after registration
function disable_auto_login() {
remove_action( 'woocommerce_registration_redirect', 'wc_auto_login_after_registration', 10 );
}
add_action( 'init', 'disable_auto_login' );
// Send confirmation email with verification link
function send_verification_email( $user_id ) {
$user = get_userdata( $user_id );
$verification_key = md5( $user->user_email . time() );
update_user_meta( $user_id, 'verification_key', $verification_key );
$subject = 'Please confirm your email address';
$message = 'Click the following link to confirm your email address: ' . site_url() . '/verify-email/?key=' . $verification_key;
wp_mail( $user->user_email, $subject, $message );
}
add_action( 'woocommerce_created_customer', 'send_verification_email' );
// Verify email upon confirmation
function verify_email() {
if ( isset( $_GET['key'] ) && isset( $_GET['email'] ) ) {
$user = get_user_by( 'email', $_GET['email'] );
$verification_key = get_user_meta( $user->ID, 'verification_key', true );
if ( $verification_key === $_GET['key'] ) {
// Email is verified, log the user in
wp_set_auth_cookie( $user->ID );
wp_redirect( home_url() ); // Redirect to home page after login
exit;
} else {
// Invalid verification key
wp_redirect( home_url( '?email_verification_error=true' ) ); // Redirect with error message
exit;
}
}
}
add_action( 'init', 'verify_email' );