Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ideadude/35dfe909d80b9926e8659973fe970c64 to your computer and use it in GitHub Desktop.
Save ideadude/35dfe909d80b9926e8659973fe970c64 to your computer and use it in GitHub Desktop.
Restrict Membership Signup by Email Domain (Useful for Education, Corporate, or Association Memberships)
<?php
/**
* Restrict Membership Signup by Email Domain
* Make sure to edit the $valid_domains array defined further below
* to include only the domains you'd like to allow.
*
* Add this code to a custom plugin. More info: https://www.paidmembershipspro.com/create-a-plugin-for-pmpro-customizations/
*/
function my_pmpro_registration_checks_restrict_email_addresses( $value ) {
$email = $_REQUEST['bemail'];
if( ! my_checkForValidDomain( $email ) ) {
global $pmpro_msg, $pmpro_msgt;
$pmpro_msg = "Please enter a valid email address";
$pmpro_msgt = "pmpro_error";
$value = false;
}
return $value;
}
add_filter( 'pmpro_registration_checks','my_pmpro_registration_checks_restrict_email_addresses', 10, 1 );
//Taken from: http://www.bitrepository.com/how-to-extract-domain-name-from-an-e-mail-address-string.html
function my_getDomainFromEmail( $email ) {
// Get the data after the @ sign
$domain = substr(strrchr($email, "@"), 1);
return $domain;
}
function my_checkForValidDomain( $email ) {
$domain = my_getDomainFromEmail( $email );
// Update this array to include the domains you want to allow
$valid_domains = array( "yahoo.com", "*.gmail.com", "*.domain.uk" );
foreach($valid_domains as $valid_domain) {
$components = explode(".", $valid_domain);
$domain_to_check = explode(".", $domain);
if($components[0] == "*" && sizeof( $domain_to_check > 2 ) ) {
if($components[1] == $domain_to_check[1] && $components[2] == $domain_to_check[2]) {
return true;
}
} else {
if( !( strpos($valid_domain, $domain) === false) ) {
return true;
}
}
}
return false;
}
@elias1435
Copy link

I have used this but showing critical error in line number 41.

if($components[0] == "*" && sizeof( $domain_to_check > 2 ) )

would you pls check this...
thanks in advance

@elias1435
Copy link

elias1435 commented Jul 6, 2022

i have found a solution to fix the error

function my_pmpro_registration_checks_restrict_email_addresses( $value ) {
$email = $_REQUEST['bemail'];
if(is_null($email)){
return $value;
}
if( ! my_checkForValidDomain( $email ) ) {
global $pmpro_msg, $pmpro_msgt;
$pmpro_msg = "Please enter a valid email address";
$pmpro_msgt = "pmpro_error";
$value = false;
}
return $value;
}
add_filter( 'pmpro_registration_checks','my_pmpro_registration_checks_restrict_email_addresses', 10, 1 );

//Taken from: http://www.bitrepository.com/how-to-extract-domain-name-from-an-e-mail-address-string.html
function my_getDomainFromEmail( $email ) {
// Get the data after the @ sign
$domain = substr(strrchr($email, "@"), 1);
return $domain;
}
function my_checkForValidDomain( $email ) {
$domain = my_getDomainFromEmail( $email );
// Update this array to include the domains you want to allow
$valid_domains = array( "yahoo.com", ".gmail.com", ".domain.uk" );
foreach($valid_domains as $valid_domain) {
$components = explode(".", $valid_domain);
$domain_to_check = explode(".", $domain);
if(!empty($components[0]->config == "*") && sizeof($domain_to_check->config > 2)) {
if($components[1] == $domain_to_check[1] && $components[2] == $domain_to_check[2]) {
return true;
}
} else {
if( !( strpos($valid_domain, $domain) === false) ) {
return true;
}
}
}
return false;
}

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