php - wp_signon 不起作用,因为移动到下一页让我没有用户登录

标签 php wordpress

在我的 wordpress 项目中,我创建了用户可以注册的模板页面。现在我面临的问题是让用户在注册后登录。我创建了一个用户,之后我尝试使用以下代码让用户登录。

$creds = array();
$creds['user_login'] = $username;
$creds['user_password'] = $password;
$creds['remember'] = true;
$user = wp_signon( $creds, false );

我还创建了一个登录模板,以允许用户使用上述相同的代码登录,但会出现相同的问题。现在我面临的问题是,一旦我移动到新页面,我发现用户没有登录。

我猜 cookies 没有得到保存。我也试过使用
wp_set_auth_cookie($user->ID,true);

但没有成功。

我无法理解我们何时使用 wp-admin 登录然后可以成功登录,或者如果我使用 wp_login_form() 那么这也可以正常工作。然后 wats 是使用上面的代码的问题。

请帮助,因为我必须无论如何让用户在注册后登录。

最佳答案

你的代码是正确的。这两段代码都将成功验证和登录用户。

但是,您缺少重定向。在调用 wp_signon() 或 wp_set_auth_cookie() 之后,您应该重定向用户以确保正在加载新的 cookie。

这可以通过在 wp_signon() 或 wp_set_auth_cookie() 调用后立即使用以下代码来完成:

wp_redirect($_SERVER['REQUEST_URI']);
exit;

如果您想将用户重定向到特定页面,您可以替换 $_SERVER['REQUEST_URI']使用您要将用户重定向到的 URL。

旁注:您应该确保在发送 header 之前调用此代码,因为在发送 header 后 wp_redirect() 将不起作用。

编辑:如果上述方法不起作用,您可以尝试整个登录过程($user 应该是用户对象,您可以使用 get_user_by() 函数获得):
do_action('wp_login', $user->user_login, $user);
wp_set_current_user( $user->ID );
wp_set_auth_cookie( $user->ID );
$redirect_to = $_SERVER['REQUEST_URI'];
wp_safe_redirect($redirect_to);
exit;

关于php - wp_signon 不起作用,因为移动到下一页让我没有用户登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25650301/

相关文章:

forms - 在重力形式中更改元素的名称属性

html - 在 Wordpress/Primer/Mins/Elementor 网站中使用 CSS 制作标题全 Angular

php - 使用 $str[0] 获取字符串的第一个字符

php - Codeigniter:多次使用 $this->load->database() 会导致多个连接吗?

wordpress - 反转 chown 命令

javascript - 如何使用内联函数调用在wordpress中调用javascript函数?

java - 使用 document.getElementsByClassName 更改不同类的样式

php - mysqli_fetch_assoc()需要参数/调用成员函数bind_param()错误。如何获取并修复实际的mysql错误?

php - 使用 PHP 生成多个进程来处理数据。

php - 如何计算每门类(class)的教授学生人数