Registro de usuario seguido de inicio de sesión automático
Estoy utilizando un plugin modificado para mis propósitos.
Lo que busco es que después de que el usuario se registre, inicie sesión automáticamente y lo redirija a la página actual. Actualmente les envía un correo electrónico con su nombre de usuario y contraseña. Luego tienen que iniciar sesión usando esos datos.

Básicamente, para iniciar sesión de un usuario puedes usar:
//Iniciar sesión del usuario
$creds = array();
$creds['user_login'] = $login;
$creds['user_password'] = $password;
if ( !empty( $remember ) ){
$creds['remember'] = true;
}
$user = wp_signon( $creds, true );
pero eso es solo cuando tienes la contraseña y el usuario
así que puedes crear tu propio formulario de registro, procesarlo y crear el usuario tú mismo
//Solo después de validar todo, proceder con la creación del usuario
//Crear el usuario
$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 );
/*Enviar correo al administrador y al nuevo usuario -
Podrías crear tu propio correo en lugar de usar esta función*/
wp_new_user_notification( $user_id, $user_pass );
y aquí tenemos tanto el usuario como la contraseña, así que puedes iniciar sesión del usuario.
Espero que esto ayude

No hay un lugar ideal para engancharse en el proceso de registro. Creo que hay un buen argumento para añadir un gancho de acción de evento de registro de usuario al núcleo. Pero creo que podrías simularlo mientras tanto. Una de las últimas cosas que ocurren cuando un usuario se registra exitosamente es la creación de una opción de usuario llamada 'default_password_nag'. Podemos crear una acción para vigilar eso y configurar al usuario cuando se establezca.
add_action('update_user_metadata', 'mi_auto_login', 10, 4);
function mi_auto_login( $metaid, $userid, $key, $value ) {
// Solo nos interesa el evento de recordatorio de contraseña. Ignorar cualquier otra cosa.
if ( 'default_password_nag' !== $key && true !== $value) {
return;
}
// Establecer las variables del usuario actual y darle una cookie.
wp_set_current_user( $userid );
wp_set_auth_cookie( $userid );
}
No probado, pero en teoría debería funcionar.
Ahora que tenemos una idea de qué hacer, opinaré que creo que esto es una mala idea en cuanto a seguridad. Las personas pueden crear cuentas falsas sin siquiera tener que pasar por la molestia de configurar un buzón de correo basura. :)

Acabo de conseguir que esa funcionalidad funcione utilizando el hook user_register y el siguiente código en mi archivo functions.php:
// Iniciar sesión automáticamente a un usuario que acaba de registrarse
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){
// Credenciales para el inicio de sesión
$credentials = array( 'user_login' => $userlogin, 'user_password' => $userpass, 'remember' => true );
// Verificar si la conexión es SSL
$secure_cookie = is_ssl();
// Aplicar filtros para la cookie segura
$secure_cookie = apply_filters('secure_signon_cookie', $secure_cookie, $credentials);
add_filter('authenticate', 'wp_authenticate_cookie', 30, 3);
// Autenticar al usuario y establecer la cookie de autenticación
$user = wp_authenticate($credentials['user_login'], $credentials['user_password']);
wp_set_auth_cookie($user->ID, $credentials["remember"], $secure_cookie);
do_action('wp_login', $user->user_login, $user);
}
