Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save denisbaranov/27b74695ed671cb286a3efb48aa6aba6 to your computer and use it in GitHub Desktop.
Save denisbaranov/27b74695ed671cb286a3efb48aa6aba6 to your computer and use it in GitHub Desktop.
The following code requires @gmail.com as an email domain for user registrations. You can change @gmail.com to any provider you want. The code below requires a user email to be collected during registration.
<?php
/**
* This example shows how to validate the email address by domain on registration.
* The code below requires a user email to be collected during registration.
*
* Change the array $allowed_email_domains - add or remove what you need.
* Add this code snippet to the end of the file functions.php in the active theme directory.
*
* Ultimate Member documentation: https://docs.ultimatemember.com/
* Ultimate Member support (for customers): https://ultimatemember.com/support/ticket/
*/
/**
* Custom validation for the field "E-mail Address" by domain on registration.
* @author Ultimate Member support <support@ultimatemember.com>
* @param array $args
*/
function um_validate_email_domain( $args ) {
// Change allowed email domains here
$allowed_email_domains = apply_filters( 'um_allowed_email_domains', array(
'gmail.com',
'yahoo.com',
'hotmail.com'
) );
// Change error message here
$message = __( 'You can not use this email domain for registration', 'ultimate-member' );
if ( isset( $args['user_email'] ) && is_email( $args['user_email'] ) ) {
$email_domain = array_pop( explode( '@', trim( $args['user_email'] ) ) );
if ( !in_array( $email_domain, $allowed_email_domains ) ) {
UM()->form()->add_error( 'user_email', $message );
}
}
}
add_action( 'um_submit_form_errors_hook__registration', 'um_validate_email_domain', 20 );
@ahmedzeidan
Copy link

Hi there,

Please advise on the code modifications to allowing whitelisting 2 domains instead of the above cod which is one domain only.

Thanks.

@denisbaranov
Copy link
Author

Hi there,

Please advise on the code modifications to allowing whitelisting 2 domains instead of the above cod which is one domain only.

Thanks.

The code snippet is changed. You can set several email domains in an array.

@ahmedzeidan
Copy link

Thanks a lot, Denis

@jordacheb
Copy link

Hi Denis!!

I'm getting this message after tried to register using your code on my page:
"Notice: Only variables should be passed by reference"

It apparently works but shows that message and break a little the page layout.

My site is running PHP 7.3.25
Could it be the problem?

Thanks in advance!

@alemacks
Copy link

alemacks commented Mar 6, 2023

Is there a way to restrict this not to domains, but to specific TLD's? .gov and .org are needed on a project I am working on.

@alemacks
Copy link

alemacks commented Mar 6, 2023

Tried wildcard in the array, no luck.

@alemacks
Copy link

alemacks commented Mar 6, 2023

function my_submit_form_errors_registration( $args ) {

	// Change error message here
	$message = __( 'You can not use this email domain for registration. Please ensure your department has been whitelisted by the staff.', 'ultimate-member' );

	if ( isset( $args['user_email'] ) && is_email( $args['user_email'] ) ) {
		$email_domain = strtolower( array_pop( explode( '@', trim( $args['user_email'] ) ) ) );
		$pattern = '/^[a-zA-Z0-9\-\.]+\.(gov|org)$/i';
		if ( !preg_match( $pattern, $email_domain ) ) {
			UM()->form()->add_error( 'user_email', $message );
		}
	}
}
add_action( 'um_submit_form_errors_hook__registration', 'my_submit_form_errors_registration', 10, 1 );

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment