默认wp-登录表单之外的用户登录表单

时间:2013-09-18 作者:LoomyBear

我正在尝试实现一个由4个步骤组成的自定义注册过程。在第一步中,用户输入凭据并按下“continue”(继续)继续下一步,表单将发送到同一页面。

在这里,我成功地向WP数据库插入了一个新用户,我希望该用户在此之后立即登录。我这样做:

if ( isset($_POST["user-email"]) && isset($_POST["user-password"]) ) :

// Getting data from the Form
$user_login = esc_attr($_POST["user-email"]);
$user_password = esc_attr($_POST["user-password"]);
$user_email = esc_attr($_POST["user-email"]);

// Composing an array with user credentials data
$user_data =
    array(
        \'user_login\'    =>  $user_login,
        \'user_pass\'     =>  $user_password,
        \'user_email\'    =>  $user_email,
        \'role\'          =>  \'student\'
    );

// Inserting new user to the db
wp_insert_user( $user_data );

// Trying to log in
$creds = array();
$creds[\'user_login\'] = $user_login;
$creds[\'user_password\'] = $user_password;
$creds[\'remember\'] = true;

// As far as I know whis does the trick
$user = wp_signon( $creds, false );

if ( is_wp_error( $user ) ) echo $user->get_error_message();

endif;
问题从这里开始。wp_signon 由于某种原因,未登录用户,我通过以下方式进行检查:

if ( is_user_logged_in() ) : echo "Yuppiee!";
else : echo "FAIL!";
我总是会“失败”。然后我打开互联网,尝试了以下方法:

wp_set_current_user( $user->ID );

if ( is_user_logged_in() ) : echo "Yuppiee!";
else : echo "FAIL!";
还有我的雅皮士最后,但不会太久。重新加载页面后,我失败了!再一次

最后,我在我的WP数据库中添加了一个新用户,我可以在WP管理员/用户面板中看到她,我可以通过默认的WP登录表单登录这个用户,我得到了雅皮士!一路走来。但当我尝试以编程方式登录同一个用户时,页面重新加载失败。

你能帮我渡过难关吗?请

1 个回复
SO网友:Chris

我想这可能是Wordpress的bug。根据文件,wp_signon() 是用户登录的正确功能。

在脚本中,您正在使用is_user_logged_in() 在您呼叫后验证用户是否正确登录wp_signon(). is\\u user\\u logged\\u in()使用global $current_user 使用时似乎未设置的变量wp_signon().

wp_set_current_user() 设置global $current_user, 但不会创建保持用户登录所需的身份验证cookie。

请尝试以下操作:

$user = wp_signon();
wp_set_current_user( $user->ID );
is_user_logged_in();
这样,您就可以将用户登录(创建身份验证cookie)并在尝试使用验证之前设置当前用户is_user_logged_in().

结束