Forked from strangerstudios/my_pmpro_checkout_restrict_email_domain.php
Last active
April 2, 2025 06:28
-
-
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)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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] == "*" && count( $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; | |
} |
I've just now fixed the line 41 error. Thanks.
Updated version with some other improvements here: https://gist.github.com/ipokkel/61ec7b455b655d96f8b4c717e454a63c#file-my-pmpro-restrict-checkout-email-domain-per-level-php-L24-L27
Another updated version that allows applying the email domain restrictions to all or only specific memberships levels - https://gist.github.com/ipokkel/e939a58b9b45bf4e1747a2b7ef518254
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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;
}