WordPress Code

How to Find Duplicate Email Addresses in WordPress

Quickly find duplicate email addresses in the WordPress users table in the database so you can maintain a unique email address per user.

I have used this code snippet in countless projects over the years.

Membership sites do a good job of enforcing unique email addresses per WordPress user but sometimes duplicate email addresses can slip through the cracks.

This may be due to user migrations, data imports or custom registration forms.

If your site uses functions that assume each WordPress user has a unique email address, admins need to know what they are so they can be fixed.

I run the following code in a weekly cron job on my membership sites.

[pastacode lang=”php” manual=”%09%2F**%0A%09%20*%20Weekly%20job%20to%20check%20for%20duplicate%20email%20addresses%20in%20users%20table%0A%09%20*%20Send%20an%20email%20to%20site%20admins%20if%20duplicate%20email%20addresses%20are%20found%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%24results%20will%20return%20an%20empty%20array%20if%20no%20duplicates%20found%0A%20%20%20%20%20*%20%24results%20will%20return%20an%20array%20of%20objects%20with%20the%20properties%3A%0A%20%20%20%20%20*%20%20%20%20%20%20user_email%20%20%20%20%20%20The%20email%20address%0A%20%20%20%20%20*%20%20%20%20%20%20NumOccurrences%20%20The%20number%20of%20duplicates%0A%09%20*%2F%0A%09public%20function%20zpd_weekly_duplicate_email_check()%7B%0A%09%09global%20%24wpdb%3B%0A%0A%09%09%2F%2F%20Search%20for%20duplicate%20email%20addresses%0A%09%09%24results%20%20%3D%20%24wpdb-%3Eget_results(%0A%09%09%09%22SELECT%20user_email%2C%20COUNT(user_email)%20%0A%09%09%09AS%20NumOccurrences%0A%09%09%09FROM%20%24wpdb-%3Eusers%0A%09%09%09GROUP%20BY%20user_email%0A%09%09%09HAVING%20(COUNT(user_email)%20%3E%201)%22%0A%09%09)%3B%0A%0A%09%09%2F%2F%20Check%20the%20results%0A%09%09if(%20!empty(%20%24results%20)%20)%7B%0A%09%09%20%20%20%20%2F%2F%20Duplicate%20emails%20found%20-%20loop%20through%20them%20all%0A%09%09%09%24email_msg%20%3D%20sprintf(%20’The%20following%20duplicate%20emails%20were%20found%20in%20the%20users%20table%20on%20the%20%25s%20site%3A%20’%2C%20get_bloginfo(%20’name’%20)%20)%3B%0A%09%09%09%24email_str%20%3D%20”%3B%0A%09%09%09foreach(%20%24results%20as%20%24email_address%20)%7B%0A%09%09%09%09%24email_str%20.%3D%20%22%5Cn%22%20.%20%24email_address-%3Euser_email%20.%20’%20’%20.%20sprintf(%22(occurances%20x%25s)%20%22%2C%20%24email_address-%3ENumOccurrences%20)%3B%0A%09%09%09%7D%0A%0A%09%09%09%2F%2F%20Send%20email%20to%20admins%0A%09%09%09wp_mail(%20get_bloginfo(%20’admin_email’%20)%2C%20get_bloginfo(%20’name’%20)%20.%20’%3A%20Duplicate%20Emails%20Found’%2C%20%24email_msg%20.%20%24email_str%20)%3B%0A%09%09%7D%20else%20%7B%0A%09%09%20%20%20%20%2F%2F%20No%20duplicate%20emails%20found%20-%20do%20something%20or%20nothing…%0A%09%09%7D%0A%09%7D%0A” message=”” highlight=”” provider=”manual”/]

Modify the code for your own needs and let me know in the comments below if it was useful.

Was this article helpful?
YesNo