我正在尝试实现一个由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登录表单登录这个用户,我得到了雅皮士!一路走来。但当我尝试以编程方式登录同一个用户时,页面重新加载失败。
你能帮我渡过难关吗?请
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()
.