我想通过电子邮件链接将访问者自动登录到WP。我在他们的电子邮件中使用“userid”参数,并使用“redirect\\u to”参数来知道指向他们的位置。网站上有一些保护区,只供注册访客使用,如果他们不先登录,他们就看不到这些保护区(这就是自动登录的原因)。
我的问题是,自动登录工作正常,但只有第二次有人跟踪链接。否则,他们会收到一条消息,说明页面受到保护。我应该试试另一个钩子吗?
这是我的代码:
class zelfunctions
{
public function __construct()
{
add_action( \'init\', array(&$this, "autologin"));
}
public function autologin(){
if (!is_user_logged_in()) {
$redirect = isset($_GET[\'redirect_to\']) ? esc_attr($_GET[\'redirect_to\']) : false;
$useremail = isset($_GET[\'userid\']) ? sanitize_user($_GET[\'userid\']) : false;
if ($user = get_user_by( \'email\', $userid )) {
wp_set_current_user($user->ID, $user->user_login);
wp_set_auth_cookie($user->ID);
do_action(\'wp_login\', $user->user_login);
if (!$redirect) {
//If there isn\'t any redirect set, just redirect to the home (already logged in)
$final_url = home_url(\'/\');
} else {
$final_url = home_url(\'/\'). $redirect;
}
wp_redirect($final_url);
exit;
}
}
}
}
最合适的回答,由SO网友:Matt van Andel 整理而成
这个init
钩子太早了,所以is_user_logged_in()
检查失败。
尝试使用wp_head
改为挂钩(优先级为-1)。退出/退出功能仍将阻止页面加载,但将为您提供更多访问可能需要评估的关键全局数据的权限。
示例:
add_action( \'wp_head\', array(&$this, "autologin"), -1);