user_email;
// Generate a unique verification token
$token = md5($user_id . time() . $email);
// Save the token in user meta
update_user_meta($user_id, ’email_verification_token’, $token);
update_user_meta($user_id, ’email_verified’, 0); // Mark user as not verified yet
// Create verification URL (change ‘your-site.com’ to your domain or use site_url())
$verify_url = add_query_arg( array(
‘verify_email’ => $user_id,
‘token’ => $token
), site_url() );
// Prepare email content
$subject = “Email Verification”;
$message = “Hi ” . $user->display_name . “,\n\n”;
$message .= “Thank you for registering. Please click the link below to verify your email address:\n\n”;
$message .= $verify_url . “\n\n”;
$message .= “If you did not register on our website, please ignore this email.\n\n”;
$message .= “Best regards,\nYour Website Team”;
// Send the email using WordPress’s wp_mail function
wp_mail($email, $subject, $message);
}
add_action(‘user_register’, ‘send_verification_email’);
// Function to verify user email when the verification link is clicked
function verify_user_email() {
if ( isset($_GET[‘verify_email’]) && isset($_GET[‘token’]) ) {
$user_id = absint($_GET[‘verify_email’]);
$token = sanitize_text_field($_GET[‘token’]);
// Retrieve the token from user meta
$stored_token = get_user_meta($user_id, ’email_verification_token’, true);
if ( $token && $token === $stored_token ) {
// Mark the email as verified
update_user_meta($user_id, ’email_verified’, 1);
// Optionally, delete the token after verification
delete_user_meta($user_id, ’email_verification_token’);
// Redirect to a “verification successful” page (you can create a custom page)
wp_redirect( site_url(‘/verification-success’) );
exit;
} else {
// Redirect to an error page if verification fails
wp_redirect( site_url(‘/verification-failed’) );
exit;
}
}
}
add_action(‘init’, ‘verify_user_email’);
// Optional: Prevent users from logging in until they verify their email
function restrict_unverified_user_login($user_login, $user) {
$email_verified = get_user_meta($user->ID, ’email_verified’, true);
if ( !$email_verified ) {
// Log the user out and show an error message.
wp_logout();
wp_die(“Your email address is not verified. Please check your inbox for the verification link.”);
}
}
add_action(‘wp_login’, ‘restrict_unverified_user_login’, 10, 2);