Tektriks

Coding starts here
Home / Blog

How To Make Custom WordPress Registration Form

Want to make a custom wordpress registration form. It uses WordPress optimized security/ hackproof functionality to check and validate before inserting data to the database and creating a new user.

<?php
/**
* Template Name: Registration
*/
	$error_msg = '';
	$success_msg = '';
	// check to make sure user registration is enabled
	$registration_enabled = get_option('users_can_register');

	if( ! $registration_enabled ):
		wp_redirect( site_url() );
	elseif( ! is_user_logged_in() ):
		
		if(! isset($_POST['submit']) && isset($_POST['vb_new_user_nonce']) )
		{
			$firstname = sanitize_text_field($_POST['firstname']);
			$lastname = sanitize_text_field($_POST['lastname']);
			$nickname = sanitize_text_field($_POST['nickname']);
			$email_address = sanitize_email($_POST['email']);
			$username = sanitize_text_field($_POST['username']);
			$password1 = sanitize_text_field($_POST['password1']);
			$password2 = sanitize_text_field($_POST['password2']);
			$website = esc_url($_POST['website']);
			$description = sanitize_text_field($_POST['info']);
			$dob = sanitize_text_field($_POST['dob']);
			$tel =sanitize_text_field($_POST['telephone']);
		
			if( empty($username)){ $error_msg.= 'Username can not be left blank.<br/>'; }
			if( empty($password1) || empty($password2) ){ $error_msg.= 'One or both password field/s is/are blank.<br/>'; }
			if( username_exists( $username ) ) { $error_msg.= 'Username already exists!<br/>'; }
			if( email_exists($email_address) ){ $error_msg.= 'Email already exists!'; }
			if( !filter_var($website, FILTER_VALIDATE_URL) ) { $error_msg.= 'Website is not a valid URL'; }
			if( wp_verify_nonce( $_POST['vb_new_user_nonce'], 'vb_new_user' ) ){ $error_msg.= 'Something went wrong. Please try again.'; }			

			if( $error_msg == '' )
			{
				global $wpdb;									
				// Store values to save in user meta.
				$meta = array();
				
				// Filter a user's first name before the user is created or updated.
				$meta['first_name'] = apply_filters( 'pre_user_first_name', $firstname );
				// Filter a user's last name before the user is created or updated.
				$meta['last_name'] = apply_filters( 'pre_user_last_name', $lastname );
				// Sanitizing username
				$user = sanitize_user( $username, true );
				// Filter a username after it has been sanitized. This filter is called before the user is created or updated.
				$user = apply_filters( 'pre_user_login', $user );
				//Remove any non-printable chars from the login string to see if we have ended up with an empty username
				$userdata['user_login'] = trim( $user );				
				$userdata['user_pass'] = wp_hash_password( $password2 );
				// Sanitizing nickname
				$nick = sanitize_title( $nickname );
				// Filter a user's nicename before the user is created or updated.
				$userdata['user_nicename'] = apply_filters( 'pre_user_nicename', strtolower( $nick ) );				
				$meta['nickname'] = $userdata['user_login'];
				// Filter a user's URL before the user is created or updated.
				$userdata['user_url'] = apply_filters( 'pre_user_url', $website );
				// Filter a user's email before the user is created or updated.
				$userdata['user_email'] = apply_filters( 'pre_user_email', $email_address );
				// Filter a user's description before the user is created or updated.
				$meta['description'] = apply_filters( 'pre_user_description', $description );
				$userdata['user_registered'] = empty( $_POST['user_registered'] ) ? gmdate( 'Y-m-d H:i:s' ) : $_POST['user_registered'];
				$userdata['user_activation_key'] = '';
				$userdata['user_status'] = 0;
				$userdata['display_name'] = $meta['first_name'] . ' ' . $meta['last_name'];
				$meta['date_of_birth'] = $dob;
				$meta['mobile'] = $tel;
				$meta['rich_editing'] = 'true';
				$meta['comment_shortcuts'] = 'false';
				$meta['admin_color'] = 'fresh';
				$meta['use_ssl'] = 0;
				$meta['show_admin_bar_front'] =  'false';				
				
				$wpdb->insert( $wpdb->users, $userdata );
				$user_id = (int) $wpdb->insert_id;
				
				$user = new WP_User( $user_id );		
				
				// Update user meta.
				foreach ( $meta as $key => $value ) {
					update_user_meta( $user_id, $key, $value );
				}

				foreach ( wp_get_user_contact_methods( $user ) as $key => $value ) {
					if ( isset( $userdata[ $key ] ) ) {
						update_user_meta( $user_id, $key, $userdata[ $key ] );
					}
				}
				
				$user->set_role(get_option('default_role'));
				wp_cache_delete( $user_id, 'users' );
				do_action( 'user_register', $user_id );			
				$success_msg = "Registration successful. Please <a href='" . get_permalink( 96 ) . "'>login</a>.";
				$_POST = array();	
			}
		}	
		
get_header();	
?>

	<div id="content">
		<?php
			if( $error_msg != '' ):
		?>	
			<div class="error-box msg-box"><?php echo $error_msg; ?></div>
		<?php	
			endif;
		?>
		<?php
			if( $success_msg != '' ):
		?>	
			<div class="success-box msg-box"><?php echo $success_msg; ?></div>
		<?php	
			endif;
		?>		
		<form name="registration" action="<?php echo get_permalink(); ?>" method="POST">
			<legend>Registration Form</legend>
			<p class="required-info"><span>*</span> = required field</p>
			<p>
				<label>First Name</label>
				<input type="text" name="firstname" value="<?php echo ( ! empty( $_POST['firstname'] ) )? $_POST['firstname']:'';  ?>" />
			</p>
			<p>
				<label>Last Name</label>
				<input type="text" name="lastname" value="<?php echo ( ! empty( $_POST['lastname'] ) )? $_POST['lastname']:'';  ?>" />
			</p>
			<p>
				<label>Display Name</label>
				<input type="text" name="nickname" value="<?php echo ( ! empty( $_POST['nickname'] ) )? $_POST['nickname']:'';  ?>" />
			</p>
			<p>
				<label>Email Address</label>
				<input type="email" name="email" value="<?php echo ( ! empty( $_POST['email'] ) )? $_POST['email']:'';  ?>" />
			</p>
			<p>
				<label>Username<span>*</span></label>
				<input type="text" name="username" value="<?php echo ( ! empty( $_POST['username'] ) )? $_POST['username']:'';  ?>" />										
			</p>
			<p>
				<label>Password<span>*</span></label> 
				<input type="password" name="password1" />					
			</p>			
			<p>
				<label>Repeat Password<span>*</span></label>
				<input type="password" name="password2" />
			</p>
			<p>
				<label>Website</label>
				<input type="text" name="website" value="<?php echo ( ! empty( $_POST['website'] ) )? $_POST['website']:'';  ?>" />
			</p>
			<p>
				<label>Introduction</label>
				<textarea name="info"><?php echo ( ! empty( $_POST['info'] ) )? $_POST['info']:'';  ?></textarea>
			</p>
			<p>
				<label>Date of Birth <em>Format: DD/MM/YYYY e.g. 17/09/1991</em></label>
				<input type="text" name="dob" value="<?php echo ( ! empty( $_POST['dob'] ) )? $_POST['dob']:'';  ?>" />
			</p>
			<p>
				<label>Telephone</label>
				<input type="tel" name="telephone" value="<?php echo ( ! empty( $_POST['telephone'] ) )? $_POST['telephone']:'';  ?>" />
			</p>
			<?php wp_nonce_field('vb_new_user','vb_new_user_nonce', true, true ); ?>
			<p>
				<input type="hidden" name="user_registered" value="<?php echo gmdate( 'Y-m-d H:i:s' ) ?>"/>
				<input type="reset"/>
				<input type="submit" name="submit" value="Signup!" />
			</p>
		</form>
	</div>

<?php
	else:
		wp_redirect( site_url() );
	endif;

/**
* 	Customizing alert function for notifying Admin & new user
* 	You may/should include this function to your theme functions.php file
*/

if ( !function_exists('wp_new_user_notification') ) {
	function wp_new_user_notification( $user_id, $plaintext_pass = '' ) {

		$user = new WP_User( $user_id );

		$user_login = stripslashes( $user->user_login );
		$user_email = stripslashes( $user->user_email );

		$message  = sprintf( __('New user registration on %s:'), get_option('blogname') ) . "\r\n\r\n";
		$message .= sprintf( __('Username: %s'), $user_login ) . "\r\n\r\n";
		$message .= sprintf( __('E-mail: %s'), $user_email ) . "\r\n";

		@wp_mail(
			get_option('admin_email'),
			sprintf(__('[%s] New User Registration'), get_option('blogname') ),
			$message
		);

		if ( empty( $plaintext_pass ) )
			return;

		$message  = __('Hi there,') . "\r\n\r\n";
		$message .= sprintf( __("Welcome to %s! Here's how to log in:"), get_option('blogname')) . "\r\n\r\n";
		$message .= wp_login_url() . "\r\n";
		$message .= sprintf( __('Username: %s'), $user_login ) . "\r\n";
		$message .= sprintf( __('Password: %s'), $plaintext_pass ) . "\r\n\r\n";
		$message .= sprintf( __('If you have any problems, please contact me at %s.'), get_option('admin_email') ) . "\r\n\r\n";
		$message .= __('Adios!');

		wp_mail(
			$user_email,
			sprintf( __('[%s] Your username and password'), get_option('blogname') ),
			$message
		);
	}
}
 
get_footer();
?>
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x