I am currently running a few WordPress installations with the great BuddyPress plugin. If you don’t know this plugin yet: you can create your own social network using this plugin. For example, it is possible to add groups, forums, membership, and even “@” commenting and discussions (like Twitter). Pretty nifty, really.
One thing that stumped me for a while was how to limit registrations to a particular domain. In my case, I wanted to limit registration to users with EDU email addresses (because the network is affiliated with our Five College System).
As it turns out, the code is not too involved. I just had to disassemble a discontinued plugin to find it. In any case… it works well and can even be expanded to use a blacklist/whitelist approach. Below is the code that you need to put into your functions.php file in your template.
I am using this on a single-site installation with the default BuddyPress template, and the code below only checks for EDU, so your mileage might vary. Adapt the code as you see fit.
// Limit signup to EDU emails - could also be used for banning domains // Function that checks and returns error function bp_as_restrict_signup_domains( $result ) { // Send error if this test fails if ( bp_as_check_email_domains( $result['user_email'] ) ) { $result['errors']->add('user_email', __('You must use an EDU email to sign up!', 'bp-restrict-email-domains' ) ); }; return $result; }; add_filter( 'bp_core_validate_user_signup', 'bp_as_restrict_signup_domains' ); // Helper function for the actual test function bp_as_check_email_domains( $user_email ) { $email_domain = strtolower( substr( $user_email, 1 + strpos( $user_email, '@' ) ) ); // Could check against array here too $is_edu = strpos( $email_domain , "edu" ); if ($is_edu === false) { // Error will be raised return true; } else { return false; }; };
I just implemented a banning routine that is actually a bit cleaner than the one above. Here’s the code:
// ==================================== // Limit signup by banning domains function bp_as_restrict_signup_domains( $result ) { $banned = array( 'spam1.com', 'spam2.com' ); $error = 'Your email domain has been the source of spam. Please use another email address.'; $email = $result['user_email']; $domain = array_pop(explode('@', $email)); if ( in_array($domain, $banned)) { $result['errors']->add('user_email', __($error, 'bp-restrict-email-domains' ) ); }; return $result; } add_filter( 'bp_core_validate_user_signup', 'bp_as_restrict_signup_domains' );
Source:
- Stack Overflow (for the second snippet)