Автоматический вход после регистрации

Я использую custom registration form, и пользователи регистрируются, когда они sign up.

Теперь я действительно хочу, чтобы пользователи перенаправлялись на свои profile page с помощью auto_logged in после завершения registration. Я искал несколько решений для переполнения стека строгого текста, но ни одно из них мне не помогло.

Вот моя регистрация snippet

Примечание: здесь нет регистрационной формы.

$err = '';
$success = '';
global $wpdb, $PasswordHash, $current_user, $user_ID;
if(isset($_POST['task']) && $_POST['task'] == 'register' ) {
    $pwd1 = $wpdb->escape(trim($_POST['pwd1']));
    $pwd2 = $wpdb->escape(trim($_POST['pwd2']));
    $first_name = $wpdb->escape(trim($_POST['first_name']));
    $last_name = $wpdb->escape(trim($_POST['last_name']));
    $email = $wpdb->escape(trim($_POST['email']));
    $username = $wpdb->escape(trim($_POST['user_name']));

        $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);

            $success = 'You\'re successfully register';

        }               
}

Любая помощь приветствуется. Спасибо.


person Prabin Parajuli    schedule 06.05.2016    source источник


Ответы (3)


Вы используете действие «user_register» после успешного завершения регистрации, поэтому, используя этот хук, когда регистрация пользователя будет завершена, это будет автоматический вход в систему следующим образом:

// 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';

        }          
person user5200704    schedule 10.05.2016
comment
Я попробовал второй вариант, и он перенаправляется на login-page, но пользователь не получает logged-in. Пользователь должен ввести свои username и passwords - person Prabin Parajuli; 10.05.2016
comment
поставить галочку в wp_redirect(admin_url('profile.php')); - person user5200704; 10.05.2016
comment
О, я сделал ошибку. Забыл использовать функцию wp_signon. На самом деле, я хотел перенаправить на homepage с logged-in, и это работает. Спасибо тебе. Тем не менее, вы можете помочь мне по небольшому вопросу. При перенаправлении на домашнюю страницу пользователь увидит всплывающее окно или сообщение в заголовке о том, что он успешно зарегистрировался. Но только для зарегистрированного пользователя, а не для других существующих пользователей при входе в систему. - person Prabin Parajuli; 10.05.2016
comment
вы можете передать параметр запроса при перенаправлении на домашнюю страницу и проверить параметр запроса или показать сообщение $login_redirect = example.com? логин=успех wp_redirect($login_redirect); - person user5200704; 10.05.2016
comment
да, но вопрос в том, как отображать сообщение только по определенным параметрам. Я имею в виду, что я хочу отображать только модальные для example.com?login=success этого параметра. Я думаю, вы понимаете, что я имею в виду, верно? - person Prabin Parajuli; 10.05.2016
comment
да, вы можете проверить домашнюю страницу с помощью php $_GET['login'] == 'success' и показать свое собственное сообщение, если оно найдено в параметре входа в систему - person user5200704; 10.05.2016

Сначала добавьте эту функцию в 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>

Теперь создайте страницу, используя этот шаблон, и проверьте ее. Форма минимальна для демонстрационных целей, вы можете изменить ее самостоятельно. Обязательно выполняйте проверку и очистку безопасно.

person sarahcoding    schedule 09.05.2016

Поместите этот код в файл 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' );
    ?>

Я надеюсь, что это сработает для вас. Спасибо.

person vishal patel    schedule 06.05.2016
comment
ну, это регистрационная форма code для Default WordPress. но у меня есть Custom Registration Form приятель. - person Prabin Parajuli; 06.05.2016
comment
wordpress.stackexchange.com/questions/ 8998/. обратитесь по этой ссылке - person vishal patel; 06.05.2016
comment
ну, это для отправки user_details вновь зарегистрированным пользователям по почте. Не совсем то, что я ищу. Я просто хочу autologin вернуться на главную страницу. - person Prabin Parajuli; 06.05.2016