仅使用 wordpress 通过电子邮件自动登录用户

Autologin user by email only using wordpress

我正在尝试仅使用电子邮件登录用户(使用另一个系统的 API 检查密码)。问题是我的所有代码都是 运行 除了自动登录的部分,下面是我的函数:

我已经尝试过在线可用的不同功能,但以下代码发生的情况是:

1- 它会让用户登录,但在刷新或转到任何需要用户登录的页面后,wordpress 会将用户注销。

function auth_new_user($username){

if(!username_exists($username)) {
  // Generate the password and create the user

$password = wp_generate_password( 12, false );
$user_id = wp_create_user( $username, $password, $username );
// Set the nickname
wp_update_user(
array(
  'ID'          =>    $user_id,
  'nickname'    =>    $username
  )
 );
 // Set the role
 $user = new WP_User( $user_id );
 $user->set_role( 'Subscriber' );
 auto_login_usr($user_id,$username);
  } // end if
else{
 $the_user = get_user_by('email', $username);
 $user_id = $the_user->ID;
 echo $user_id;
 auto_login_usr($user_id,$username);
}

}

function auto_login_usr($user_id, $username) {

$user = get_user_by( 'id', $user_id ); 
echo $user->user_login;
echo $user->password;
if( $user ) {
wp_set_current_user( $user_id, $user->user_login );
wp_set_auth_cookie( $user_id ,false, is_ssl());
do_action( 'wp_login', $user->user_login );
}

}

登录后,WordPress 会自动注销用户(让用户保持登录状态一秒钟)。请注意,我调试了代码不止一次,一切都正确显示(用户 ID、User_login 和用户名)。

感谢您的帮助。

我自己修好了,headers已经发送了。我应该调用函数 after_theme_setup:

  1. 要么带钩子
  2. 或者在调用get_header函数之前