Registrazione utente seguita da login automatico
Sto utilizzando un plugin modificato per le mie esigenze.
Quello che voglio ottenere è che dopo la registrazione, l'utente venga automaticamente loggato e reindirizzato alla pagina corrente. Al momento il sistema invia un'email con username e password, dopodiché l'utente deve effettuare manualmente il login con queste credenziali.

Fondamentalmente, per autenticare un utente puoi utilizzare:
//Autentica l'utente
$creds = array();
$creds['user_login'] = $login;
$creds['user_password'] = $password;
if ( !empty( $remember ) ){
$creds['remember'] = true;
}
$user = wp_signon( $creds, true );
ma questo vale solo quando hai la password e il login quindi puoi creare il tuo modulo di registrazione, elaborarlo e creare l'utente da solo
//Solo dopo che tutto è stato validato, procedi con la creazione dell'utente
//Crea l'utente
$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 );
/*Invia e-mail all'amministratore e al nuovo utente -
Potresti creare la tua e-mail personalizzata invece di usare questa funzione*/
wp_new_user_notification( $user_id, $user_pass );
e qui abbiamo sia il login che la password, quindi puoi autenticare l'utente.
Spero che questo sia d'aiuto

Non esiste un punto ideale dove agganciarsi al processo di registrazione. Penso ci sia un valido motivo per aggiungere un action hook per l'evento di registrazione utente nel core. Ma nel frattempo potresti simularlo. Una delle ultime cose che accadono quando un utente si registra con successo è la creazione di un'opzione utente chiamata 'default_password_nag'. Possiamo creare un'azione per monitorare questo evento e configurare l'utente quando viene impostato.
add_action('update_user_metadata', 'my_auto_login', 10, 4);
function my_auto_login( $metaid, $userid, $key, $value ) {
// Ci interessa solo l'evento del password nag. Ignoriamo tutto il resto.
if ( 'default_password_nag' !== $key && true !== $value) {
return;
}
// Imposta le variabili dell'utente corrente e gli assegna un cookie.
wp_set_current_user( $userid );
wp_set_auth_cookie( $userid );
}
Non testato, ma in teoria dovrebbe funzionare.
Ora che abbiamo un'idea di cosa fare, voglio esprimere la mia opinione che questa sia una cattiva idea dal punto di vista della sicurezza. Le persone potrebbero creare account fasulli senza neanche doversi preoccupare di configurare una casella email temporanea. :)

Ho appena implementato con successo questa funzionalità utilizzando l'hook user_register e il seguente codice nel mio file functions.php:
// effettua il login automatico per un utente appena registrato
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){
// Creiamo l'array delle credenziali per il login
$credentials = array( 'user_login' => $userlogin, 'user_password' => $userpass, 'remember' => true );
// Verifichiamo se la connessione è SSL
$secure_cookie = is_ssl();
// Applichiamo i filtri per il cookie di autenticazione sicura
$secure_cookie = apply_filters('secure_signon_cookie', $secure_cookie, $credentials);
// Aggiungiamo il filtro per l'autenticazione via cookie
add_filter('authenticate', 'wp_authenticate_cookie', 30, 3);
// Autentichiamo l'utente
$user = wp_authenticate($credentials['user_login'], $credentials['user_password']);
// Impostiamo il cookie di autenticazione
wp_set_auth_cookie($user->ID, $credentials["remember"], $secure_cookie);
// Eseguiamo l'azione wp_login
do_action('wp_login', $user->user_login, $user);
}
