What is an easy way to display a front-end user registration form?

I’m looking for an easy way to place the user registration form on the front-end of a WordPress site. I’ve already used wp_login_form() to place the login form on the front end, but now I need to do the same with the signup form.

Any ideas?

Related posts

Leave a Reply

7 comments

  1. Jeff Starr wrote a great tutorial on front-end registration, login and password recovery
    taking the similar approach as suggested by onetrickpony.
    So take this as a follow up to his answer and as another resource that might help you get it done:
    http://digwp.com/2010/12/login-register-password-code/

    Now you have two examples how to code this yourself and trust me – it’s definitely worth doing it this (your own) way. It’s not that hard and it gives you freedom, flexibility and reusability that no plugin can offer.

  2. in case you want to handle this yourself, here’s what I use:

    add_action('template_redirect', 'register_a_user');
    function register_a_user(){
      if(isset($_GET['do']) && $_GET['do'] == 'register'):
        $errors = array();
        if(empty($_POST['user']) || empty($_POST['email'])) $errors[] = 'provide a user and email';
        if(!empty($_POST['spam'])) $errors[] = 'gtfo spammer';
    
        $user_login = esc_attr($_POST['user']);
        $user_email = esc_attr($_POST['email']);
        require_once(ABSPATH.WPINC.'/registration.php');
    
        $sanitized_user_login = sanitize_user($user_login);
        $user_email = apply_filters('user_registration_email', $user_email);
    
        if(!is_email($user_email)) $errors[] = 'invalid e-mail';
        elseif(email_exists($user_email)) $errors[] = 'this email is already registered, bla bla...';
    
        if(empty($sanitized_user_login) || !validate_username($user_login)) $errors[] = 'invalid user name';
        elseif(username_exists($sanitized_user_login)) $errors[] = 'user name already exists';
    
        if(empty($errors)):
          $user_pass = wp_generate_password();
          $user_id = wp_create_user($sanitized_user_login, $user_pass, $user_email);
    
          if(!$user_id):
            $errors[] = 'registration failed...';
          else:
            update_user_option($user_id, 'default_password_nag', true, true);
            wp_new_user_notification($user_id, $user_pass);
          endif;
        endif;
    
        if(!empty($errors)) define('REGISTRATION_ERROR', serialize($errors));
        else define('REGISTERED_A_USER', $user_email);
      endif;
    }
    

    the code is almost identical to the one from the user signup page.

    then add your form in your template:

    <?php
      if(defined('REGISTRATION_ERROR'))
        foreach(unserialize(REGISTRATION_ERROR) as $error)
          echo "<div class="error">{$error}</div>";
      // errors here, if any
    
      elseif(defined('REGISTERED_A_USER'))
        echo 'a email has been sent to '.REGISTERED_A_USER;
    ?>
    <form method="post" action="<?php echo add_query_arg('do', 'register', home_url('/')); ?>">
      <label>
        User:
        <input type="text" name="user" value=""/>
      </label>
    
      <label>
        Email:
       <input type="text" name="email" value="" />
      </label>
    
      <label>
        Delete this text:
       <input type="text" name="spam" value="some_crappy_spam_protection" />
      </label>
    
      <input type="submit" value="register" />
    </form>
    

    you can either create a widget with this, a shortcode or just the usual page template…

  3. Gravity Forms is the best contact form plugin for WordPress, IMO. There newest version, in beta, has a user registration add-on. I have tried it and it works great. It will cost you though…it is $199 for a developer license.

    Pricing page
    http://www.gravityforms.com/purchase-gravity-forms/

    Blog post talking about the user registration add-on
    http://www.gravityhelp.com/

    I highly recommend this plugin to the WordPress community.

    Detailed Specifications:

    Here are some of the features of the User Registration Add-On:

    • User Registration – Setup a form to
      register a user by mapping your form
      fields to available user registration
      fields in WordPress.
    • User Meta – Easily populate user meta
      data such as bio, instant messaging
      id, first name, last name as well as
      custom user meta to suit your needs.
    • BuddyPress Integration – Populate
      BuddyPress profile field data as part
      of the user registration process.
      Currently works with BuddyPress
      v1.2.6.
    • Payment Integration – Require a
      payment before user registration
      occurs. Includes support for PayPal
      subscriptions, and changing the user
      role or deleting the user if the
      subscription is canceled.
    • Password Field – The User
      Registration Add-On adds a Password
      field to Gravity Forms for use in
      your forms. The Password field
      includes a confirmation option, as
      well as a built in password strength
      checker option.
    • Post Author – Integrate the User
      Registration Add-On and Post Creation
      on a single form so that the author
      of the post that is created is the
      user registered by the add-on.
    • Site Creation – Automatically create
      a site on a WordPress network
      (multi-site) install and assign the
      newly created users as the
      Administrator for the site.
  4. Here’s a nice and easy way I’ve done this:

    Copy the field names and any other stuff from the current WordPress registration form. Make sure your custom form has the same name fields including hidden ones and then merely point the form action to the proper registration url: http://www.yourblog.com/wp-login.php?action=register – You then might want to change how the form redirects after registration as well if you don’t like how it is handled.

    There is also this plugin called Insite Login which allows you to drop in the registration form, login form and others into pages on your site: http://wordpress.org/extend/plugins/insitelogin/

    The first solution should do what you want it to do though.