注册后自动登录

时间:2016-05-06 09:06:27

标签: wordpress registration autologin

我正在使用custom registration form,用户在sign up时已注册。

现在,我真正想要做的是用户 重定向到<{1>}之后 profile page auto_logged in已完成。我在强文堆栈溢出时搜索了一些解决方案,但没有人帮助我。

这是我的注册registration

  

注意:此处不包含注册表

snippet

感谢任何帮助。 感谢。

3 个答案:

答案 0 :(得分:2)

首先,将此功能添加到functions.php

function so37068411_wp_auto_login($username, $useremail, $userpwd) {

    if ( empty($username)
    || empty($useremail)
    || empty($userpwd) )
    return; // better to send out a message.

    $username  = sanitize_user($username);
    $useremail = sanitize_email($useremail);
    $userpwd   = sanitize_user($userpwd);

    if ( username_exists($username) ) {
        // do something.
    }

    $user_id = wp_create_user($username, $userpwd, $useremail);

    if ($user_id) {
        wp_set_auth_cookie( $user_id, false, is_ssl() );
        wp_redirect( admin_url('profile.php') );
        exit;
    } else {
        // do something.
    }

}

您可以添加其他验证。这取决于您的表单字段。

其次,创建一个测试页面模板:

/**
 * Template Name: Registration Page
 */
if ( isset($_POST['submit-btn']) ) {
    so37068411_wp_auto_login($_POST['user_name'], $_POST['user_pwd'], $_POST['user_email']);
}
?><!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>WordPress Deployment &lsaquo; Registration Form</title>
<link rel="stylesheet" href="<?= admin_url('load-styles.php?c=1&amp;dir=ltr&amp;load%5B%5D=dashicons,buttons,forms,l10n,login&amp;ver=4.5.2') ?>" type="text/css" media="all" />
</head>
<body class="login login-action-register wp-core-ui locale-en-us">
<div id="login">
  <form name="registerform" id="registerform" action="" method="post" novalidate>
    <p>
      <label for="user_name">Username<br />
        <input type="text" name="user_name" class="input" value="" size="20" />
      </label>
    </p>
    <p>
      <label for="user_email">Email<br />
        <input type="email" name="user_email" class="input" value="" size="25" />
      </label>
    </p>
    <p>
        <label for="user_pwd">Password<br />
        <input type="text" name="user_pwd" class="input" value="" size="20" /></label>
    </p>
    <p class="submit">
      <input type="submit" name="submit-btn" class="button button-primary button-large" value="Register" />
    </p>
  </form>
</div>
</body>
</html>

现在,使用该模板创建一个页面并检查它。表单只是用于演示目的,您可以自己修改它。确保安全地进行验证和消毒。

答案 1 :(得分:2)

您正在使用操作&#34; user_register&#34;当成功注册完成后,使用此挂钩到用户注册完成时,它将自动登录,如下所示:

// It is login system same as wordpress and also global variable available like $current_user etc.

add_action('user_register', "auto_login_after_register");

function auto_login_after_register( $user_id ){
  global $wpdb;
  if(  'post' ==  strtolower($_SERVER['REQUEST_METHOD']) ){
     $pwd1 = $wpdb->escape(trim($_POST['pwd1']));
     $username = $wpdb->escape(trim($_POST['user_name']));  
     $creds = array();
     $creds['user_login'] = $username;
     $creds['user_password'] = $pwd1;
     $creds['remember'] = false;
     $user = wp_signon( $creds, false );
     if ( ! is_wp_error($user) ){
        wp_redirect( admin_url('profile.php') );
        exit;
     }
  } 
} 

或者无需操作即可放置代码

$user_id = wp_insert_user( array ('first_name' => apply_filters('pre_user_first_name', $first_name), 'last_name' => apply_filters('pre_user_last_name', $last_name), 'user_pass' => apply_filters('pre_user_user_pass', $pwd1), 'user_login' => apply_filters('pre_user_user_login', $username), 'user_email' => apply_filters('pre_user_user_email', $email), 'role' => 'subscriber' ) );
        if( is_wp_error($user_id) ) {
            $err = 'Error on user creation.';
        } else {
            do_action('user_register', $user_id);
            $creds = array();
                 $creds['user_login'] = $username;
                 $creds['user_password'] = $pwd1;
                 $creds['remember'] = false;
                 $user = wp_signon( $creds, false );
                 if ( is_wp_error($user) ){
                      $err = $user->get_error_message();
                 }else{
                    $login_redirect = apply_filters( 'login_redirect', admin_url('profile.php') ); 
                    wp_redirect( $login_redirect );
                    exit;
                 }
            $success = 'You\'re successfully register';

        }          

答案 2 :(得分:0)

将此代码放在functions.php文件中。

 <?php
    function tml_new_user_registered( $user_id ) {
        wp_set_auth_cookie( $user_id, false, is_ssl() );
        wp_redirect( admin_url( 'profile.php' ) );
        exit;
    }
    add_action( 'tml_new_user_registered', 'tml_new_user_registered' );
    ?>

我希望这对你有用。谢谢