Skip to content

Instantly share code, notes, and snippets.

@chrisguitarguy
Created August 30, 2011 20:28
  • Star 10 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save chrisguitarguy/1181933 to your computer and use it in GitHub Desktop.
Only lets users with an invite code register for a WordPress site.
<?php
/*
Plugin Name: WP Invite Codes
Plugin URI: http://pmg.co/
Description: Makes wordpress an invite only community.
Version: n/a
Author: Christopher Davis
Author URI: http://pmg.co/people/chris
*/
add_action( 'init', 'wpse15535_add_shortcode' );
function wpse15535_add_shortcode()
{
add_shortcode( 'invite-form', 'wpse15535_invite_form' );
}
function wpse15535_invite_form()
{
?>
<form action="" method="post">
<input type="hidden" name="wpse15535_action" value="send_invite" />
<input type="text" name="wpse15535_email" />
<input type="submit" value="<?php _e( 'Send Invite' ); ?>" />
</form>
<?php
// Do some stuff if our action is set.
if( isset( $_POST['wpse15535_action'] ) && 'send_invite' == $_POST['wpse15535_action'] )
{
// Get the email
$email = isset( $_POST['wpse15535_email'] ) && is_email( $_POST['wpse15535_email'] ) ? $_POST['wpse15535_email'] : false;
if( ! $email ) return; // bad email? bail.
// generate a random 30 character string.
$key = wp_generate_password( 30 );
// store our keys in the options table
$opts = get_option( 'wpse15535_keys' );
$opts = (array) $opts;
$opts[$email] = $key;
update_option( 'wpse15535_keys', $opts );
// Send an email!
$message = "You're invited to join a sweet community! Click here: " . home_url( 'wp-login.php?action=register&invite_key=' . $key );
wp_mail( $email, "You're invited!", $message );
}
}
add_filter( 'registration_errors', 'wpse15535_register_post', 10, 3 );
function wpse15535_register_post( $errors, $login, $email )
{
// bail if something has gone wrong already as they won't be able to register.
if( $errors->get_error_codes() ) return $errors;
// If our key isn't set an error and bail
if( ! isset( $_REQUEST['invite_key'] ) )
{
$errors->add( 'no_key', __( 'You need an invite code to register for this site' ) );
return $errors;
}
$opts = get_option( 'wpse15535_keys' );
// see if this email has a key and if it matches what was submitted.
if( ! isset( $opts[$email] ) || $_REQUEST['invite_key'] != $opts[$email] )
{
$errors->add( 'invalid_key', __( 'Invalid Registration Key' ) );
return $errors;
}
// everything okay? Just return the errors and let it go through.
return $errors;
}
add_action( 'register_form', 'wpse15535_add_key' );
function wpse15535_add_key()
{
if( isset( $_GET['invite_key'] ) )
{
echo '<input type="hidden" name="invite_key" value="' . esc_attr( $_GET['invite_key'] ) . '" />';
}
}
@dalareo
Copy link

dalareo commented Nov 11, 2014

Does it work with Wordpress 4.0?

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