Block selected email domains in WooCommerce user registration

/**
 * Blocks email domains for users.
 *
 * @see https://wpcodebook.com/woocommerce-block-email-domains-user-registration/
 * @see https://github.com/woocommerce/woocommerce/blob/8.0.2/plugins/woocommerce/includes/wc-user-functions.php#L90
 */
add_filter( 'woocommerce_registration_errors', function ( $errors, $username, $email ) {

	/**
	 * Set your whitelisted and/or blacklisted domains here.
	 * Variable is ignored if empty.
	 */
	$whitelisted_domains = array( 'gmail.com', 'icloud.com' );
	$blacklisted_domains = array( 'example.com' );

	$domain = explode( '@', $email );
	$domain = $domain[1];

	if (
		( ! empty( $whitelisted_domains ) && ! in_array( $domain, $whitelisted_domains ) ) ||
		( ! empty( $blacklisted_domains ) &&   in_array( $domain, $blacklisted_domains ) )
	) {
		$errors->add( 'wpcodebook_email_domain_validation', sprintf( __( "'%s' email domain is not allowed." ), $domain ) );
	}

	return $errors;

}, 10, 3 );

Leave a Comment