Автоматический вход пользователя после регистрации
Я использую модифицированный плагин для своих целей.
Мне нужно, чтобы после регистрации пользователь автоматически входил в систему и возвращался на текущую страницу. В данный момент система отправляет им email с логином и паролем, после чего они должны вручную войти, используя эти данные.

Основной способ авторизации пользователя:
//Авторизуем пользователя
$creds = array();
$creds['user_login'] = $login;
$creds['user_password'] = $password;
if ( !empty( $remember ) ){
$creds['remember'] = true;
}
$user = wp_signon( $creds, true );
но это работает только когда у вас есть логин и пароль поэтому вы можете создать свою форму регистрации, обработать её и создать пользователя самостоятельно
//Только после успешной валидации всех данных, создаем пользователя
//Создаем пользователя
$user_pass = wp_generate_password();
$user = array(
'user_login' => $username,
'user_pass' => $user_pass,
'first_name' => $firstname,
'last_name' => $lastname,
'user_email' => $email
);
$user_id = wp_insert_user( $user );
/*Отправляем email администратору и новому пользователю -
Вы можете создать свой собственный email вместо использования этой функции*/
wp_new_user_notification( $user_id, $user_pass );
и здесь у нас уже есть и логин и пароль, поэтому мы можем авторизовать пользователя.
Надеюсь, это поможет

Нет идеального места для подключения к процессу регистрации. Думаю, есть веские основания добавить хук действия для регистрации пользователя в ядро WordPress. Но, возможно, можно временно имитировать это. Один из последних шагов при успешной регистрации пользователя — создание опции пользователя с именем 'default_password_nag'. Мы можем создать действие, которое будет следить за этим, и выполнять настройку пользователя, когда опция установлена.
add_action('update_user_metadata', 'my_auto_login', 10, 4);
function my_auto_login( $metaid, $userid, $key, $value ) {
// Нас интересует только событие сброса пароля. Игнорируем остальное.
if ( 'default_password_nag' !== $key && true !== $value) {
return;
}
// Устанавливаем текущего пользователя и выдаём ему куки.
wp_set_current_user( $userid );
wp_set_auth_cookie( $userid );
}
Не тестировалось, но в теории должно работать.
Теперь, когда у нас есть идея, что делать, замечу, что это плохая затея с точки зрения безопасности. Люди могут создавать фейковые аккаунты, даже не заморачиваясь с настройкой временной почты. :)

Мне удалось реализовать эту функциональность с помощью хука user_register и следующего кода в файле functions.php:
// автоматический вход для только что зарегистрированного пользователя
function auto_login_new_user( $user_id ) {
wp_set_auth_cookie( $user_id, false, is_ssl() );
}
add_action( 'user_register', 'auto_login_new_user' );

function login_after_register($userlogin,$userpass){
// Авторизация пользователя сразу после регистрации
$credentials = array(
'user_login' => $userlogin, // Логин пользователя
'user_password' => $userpass, // Пароль пользователя
'remember' => true // Запомнить пользователя
);
// Проверка SSL соединения
$secure_cookie = is_ssl();
// Фильтр для безопасных cookie авторизации
$secure_cookie = apply_filters('secure_signon_cookie', $secure_cookie, $credentials);
add_filter('authenticate', 'wp_authenticate_cookie', 30, 3);
// Аутентификация пользователя
$user = wp_authenticate($credentials['user_login'], $credentials['user_password']);
// Установка cookie авторизации
wp_set_auth_cookie($user->ID, $credentials["remember"], $secure_cookie);
// Действие после авторизации
do_action('wp_login', $user->user_login, $user);
}
