2

In my website currently for every new registration. New registered user is receiving their credential i.e., username and password in there email.

I want to allow the user to set their password at the time of registration and after that an email verification link will sent to their email id.

Below is my code which i want to modify:

<form method="post" class="wp-user-form " id="wp_signup_form_' . $rand_id . '" enctype="multipart/form-data">

            <div class="col-md-12 col-lg-12 col-sm-12 col-xs-12">';
    $cs_opt_array = array(
        'id' => '',
        'std' => '',
        'cust_id' => 'user_login_' . $rand_id,
        'cust_name' => 'user_login' . $rand_id,
        'classes' => 'form-control',
        'extra_atr' => ' size="20" tabindex="101" placeholder="' . __('Username*', 'theme_domain') . '"',
        'return' => true,
    );
    $output .= $cs_form_fields2->cs_form_text_render($cs_opt_array);

    $output .= '</div>';
    $output .=$cs_form_fields_frontend->cs_form_text_render(
            array('name' => __('Email*', 'theme_domain'),
                'id' => 'user_email' . $rand_id . '',
                'classes' => 'col-md-12 col-lg-12 col-sm-12 col-xs-12',
                'std' => '',
                'description' => '',
                'return' => true,
                'hint' => ''
            )
    );
$output .=$cs_form_fields_frontend->cs_form_hidden_render(
            array('name' => __('Post Type', 'theme_domain'),
                'id' => 'user_role_type' . $rand_id . '',
                'classes' => 'col-md-12 col-lg-12 col-sm-12 col-xs-12',
                'std' => 'candidate',
                'description' => '',
                'return' => true,
                'hint' => ''
            )
    );
if (is_user_logged_in()) {
        $output .= '<div class="col-md-6 col-lg-6 col-sm-12 col-xs-12">';

        $cs_opt_array = array(
            'id' => '',
            'std' => __('Create Account', 'theme_domain'),
            'cust_id' => 'submitbtn' . $rand_id,
            'cust_name' => 'user-submit',
            'cust_type' => 'button',
            'extra_atr' => ' tabindex="103" onclick="javascript:show_alert_msg(\'' . __("Please logout first then try to registration again", "theme_domain") . '\')"',
            'classes' => 'cs-bgcolor user-submit  acc-submit',
            'return' => true,
        );
        $output .= $cs_form_fields2->cs_form_text_render($cs_opt_array);

        $output .= '
        <!--</div>-->
        </div>';
    } else {
        $output .= '<div class="col-md-6 col-lg-6 col-sm-12 col-xs-12">';

        $cs_opt_array = array(
            'id' => '',
            'std' => __('Create Account', 'theme_domain'),
            'cust_id' => 'submitbtn' . $rand_id,
            'cust_name' => 'user-submit',
            'cust_type' => 'button',
            'extra_atr' => ' tabindex="103" onclick="javascript:cs_registration_validation(\'' . admin_url("admin-ajax.php") . '\',\'' . $rand_id . '\')"',
            'classes' => 'cs-bgcolor user-submit  acc-submit',
            'return' => true,
        );
$output .= $cs_form_fields2->cs_form_text_render($cs_opt_array);

        $cs_opt_array = array(
            'id' => '',
            'std' => $role,
            'cust_id' => 'login-role',
            'cust_name' => 'role',
            'cust_type' => 'hidden',
            'return' => true,
        );
        $output .= $cs_form_fields2->cs_form_text_render($cs_opt_array);

        $cs_opt_array = array(
            'id' => '',
            'std' => 'cs_registration_validation',
            'cust_name' => 'action',
            'cust_type' => 'hidden',
            'return' => true,
        );
$output .= $cs_form_fields2->cs_form_text_render($cs_opt_array);

        $output .= '
                    </div>
                    ';
    }

    $output .='
        <div class="col-md-6 col-lg-6 col-sm-12 col-xs-12 login-section">
                        <i class="icon-user-add"></i> ' . __("Already have an account?", "theme_domain") . '
                        <a href="#" class="login-link-page">' . __('Login Now', 'theme_domain') . '</a>
                    </div>
                </div>
                </div>
                <div id="result_' . $rand_id . '" class="status-message"><p class="status"></p></div>
                </div>';
    $output .='</form>';
    $output .='</div>';

Below is the function currently i am using in my website

function mytheme_registration_save($user_id) {


if ( isset($_REQUEST['action']) && $_REQUEST['action'] == 'register' ) {

        $random_password = wp_generate_password($length = 12, $include_standard_special_chars = false);
        wp_set_password($random_password, $user_id);
        $reg_user = get_user_by('ID', $user_id);
        if ( isset($reg_user->roles) && (in_array('subscriber', $reg_user->roles) || in_array('editor', $reg_user->roles) || in_array('author', $reg_user->roles)) ) {
            // Site owner email hook
            do_action('theme_domain_new_user_notification_site_owner', $reg_user->data->user_login, $reg_user->data->user_email);
            // normal user email hook
            do_action('theme_domain_user_register', $reg_user, $random_password);
        }
    }
}
}

2 Answers 2

7

Well, you can create your own login form which I´ve have done also few years ago, but it is easier to do it with a plugin. there are a lot of these plugins, for example: Auto login new user https://wordpress.org/plugins/auto-login-new-user-after-registration/; also you can add social login to your Wordpress, this creates an automatic registration on your site.

4
  • Thanks for your suggestion Fernando, but i need to do it by custom programming. may this will help some one. Mar 2, 2017 at 10:25
  • @nitish-paswan the trick is inside this plugin. Mar 2, 2017 at 17:22
  • Many Thanks. Now i able to use my own password field i used the plugin logic to achieve this.But i have one more doubt i.,e i want to send verification link to the user once he/she will approved then only they able to login. Mar 3, 2017 at 7:05
  • Yep, I saw that you put the code taken from woocommerce, but the plugin I suggets has the same code inside user verification.php; also has a nice look to be added as embeded plugin. Mar 9, 2017 at 6:25
1

For adding custom password instead of generating the default password i used the below code to add password field to my form:

//Add Custom Password Field
        $output .= '<div class="col-md-12 col-lg-12 col-sm-12 col-xs-12">';
        $output .='<label class="password">';

        $cs_opt_array = array(
            'id' => '',
            'std' => __('Password', 'jobhunt'),
            'cust_id' => 'user_pass' . $rand_id,
            'cust_name' => 'pass1',
            'cust_type' => 'password',
            'classes' => 'form-control',
            'extra_atr' => ' size="100" tabindex="101" placeholder="' . __('Password*', 'jobhunt') . '"',
            'return' => true,


        );
        $output .= $cs_form_fields2->cs_form_text_render($cs_opt_array);

        $output .='</label>';

        $output .= '</div>';
        $output .= '<div class="col-md-12 col-lg-12 col-sm-12 col-xs-12">';
        $output .='<label class="password">';

        $cs_opt_array = array(
            'id' => '',
            'std' => __('Password', 'jobhunt'),
            'cust_id' => 'user_pass' . $rand_id,
            'cust_name' => 'pass2',
            'cust_type' => 'password',
            'classes' => 'form-control',
            'extra_atr' => ' size="100" tabindex="101" placeholder="' . __('Repeat Password*', 'jobhunt') . '"',
            'return' => true,
        );
        $output .= $cs_form_fields2->cs_form_text_render($cs_opt_array);

        $output .='</label>';
        $output .= '</div>';
        //End

After that i validate this two fields by below code:

 if ( empty( $_POST['pass1'] ) || ! empty( $_POST['pass1'] ) && trim( $_POST['pass1'] ) == '' ) {
        $json['type'] = "error";
        $json['message'] = $cs_danger_html . __('<strong>ERROR</strong>: Password field is required.') . $cs_msg_html;
        echo json_encode($json);
        exit();
        }
        if ( empty( $_POST['pass2'] ) || ! empty( $_POST['pass2'] ) && trim( $_POST['pass2'] ) == '' ) {
         $json['type'] = "error";
         $json['message'] = $cs_danger_html . __('<strong>ERROR</strong>: Confirm Password field is required.') . $cs_msg_html;
         echo json_encode($json);
         exit();
        }
        if ( $_POST['pass1'] != $_POST['pass2'] ) {
            $json['type'] = "error";
            $json['message'] = $cs_danger_html . __('<strong>ERROR</strong>: Password field and Confirm Password field do not match.') . $cs_msg_html;
            echo json_encode($json);
            exit();
        }

    $random_password = $_POST['pass1'];

After validation its time to save the data in database and i used below code for saving the entered password:

function mytheme_registration_save($user_id) {


if ( isset($_REQUEST['action']) && $_REQUEST['action'] == 'register' ) {

    $random_password = $_POST['pass1'];
    wp_set_password($random_password, $user_id);
    $reg_user = get_user_by('ID', $user_id);
    if ( isset($reg_user->roles) && (in_array('subscriber', $reg_user->roles) || in_array('editor', $reg_user->roles) || in_array('author', $reg_user->roles)) ) {
        // Site owner email hook
        do_action('theme_domain_new_user_notification_site_owner', $reg_user->data->user_login, $reg_user->data->user_email);
        // normal user email hook
        do_action('theme_domain_user_register', $reg_user, $random_password);
    }
}
}
}

Now for sending the verification email i found the below link.And its really very helpful for me. Email Verification Link And Many thanks to Clay author of Email Verification post.

I simply used the below to my theme's functions.php

function wc_registration_redirect( $redirect_to ) {
wp_logout();
wp_redirect( '/sign-in/?q=');
exit;
}
// when user login, we will check whether this guy email is verify
function wp_authenticate_user( $userdata ) {
$isActivated = get_user_meta($userdata->ID, 'is_activated', true);
if ( !$isActivated ) {
    $userdata = new WP_Error(
        'inkfool_confirmation_error',
        __( '<strong>ERROR:</strong> Your account has to be activated before you can login. You can resend by clicking <a href="/sign-in/?u='.$userdata->ID.'">here</a>', 'inkfool' )
    );
}
return $userdata;
    }
// when a user register we need to send them an email to verify their account
function my_user_register($user_id) {
    // get user data
    $user_info = get_userdata($user_id);
    // create md5 code to verify later
    $code = md5(time());
    // make it into a code to send it to user via email
    $string = array('id'=>$user_id, 'code'=>$code);
    // create the activation code and activation status
    update_user_meta($user_id, 'is_activated', 0);
    update_user_meta($user_id, 'activationcode', $code);
    // create the url
    $url = get_site_url(). '/sign-in/?p=' .base64_encode( serialize($string));
    // basically we will edit here to make this nicer
    $html = 'Please click the following links <br/><br/> <a href="'.$url.'">'.$url.'</a>';
    // send an email out to user
    wc_mail($user_info->user_email, __('Please activate your account'), $html);
}
// we need this to handle all the getty hacks i made
function my_init(){
    // check whether we get the activation message
    if(isset($_GET['p'])){
        $data = unserialize(base64_decode($_GET['p']));
        $code = get_user_meta($data['id'], 'activationcode', true);
        // check whether the code given is the same as ours
        if($code == $data['code']){
            // update the db on the activation process
            update_user_meta($data['id'], 'is_activated', 1);
            wc_add_notice( __( '<strong>Success:</strong> Your account has been activated! ', 'inkfool' )  );
        }else{
            wc_add_notice( __( '<strong>Error:</strong> Activation fails, please contact our administrator. ', 'inkfool' )  );
        }
    }
    if(isset($_GET['q'])){
        wc_add_notice( __( '<strong>Error:</strong> Your account has to be activated before you can login. Please check your email.', 'inkfool' ) );
    }
    if(isset($_GET['u'])){
        my_user_register($_GET['u']);
        wc_add_notice( __( '<strong>Succes:</strong> Your activation email has been resend. Please check your email.', 'inkfool' ) );
    }
}
// hooks handler
add_action( 'init', 'my_init' );
add_filter('woocommerce_registration_redirect', 'wc_registration_redirect');
add_filter('wp_authenticate_user', 'wp_authenticate_user',10,2);
add_action('user_register', 'my_user_register',10,2);

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.