J'ai un système de travail par ajax qui change user_login des utilisateurs et voici mon code:
$wpdb->update($wpdb->users, array('user_login' => sanitize_text_field($args['user_login'])), array('ID' => $user_id));
Une fois que user_login a été modifié, WordPress a déconnecté cet utilisateur. J'essaie donc d'utiliser wp_signon après que user_login ait été modifié, mais cela ne fonctionne pas.
J'ai trouvé lors d'une tentative similaire que je devais vider le cache de l'utilisateur pour que la relogine fonctionne (après de nombreux tests frustrants!):
wp_cache_delete($user_id, 'users');
wp_cache_delete($old_user_login, 'userlogins'); // maybe unnecessary?
$creds = array('user_login' => $user_login, 'user_password' => $user_password, 'remember' => true);
wp_signon($creds);
Remarque: pour que cela fonctionne, vous devrez peut-être aussi demander à l'utilisateur de changer son mot de passe en même temps afin de pouvoir renseigner le champ $user_password
avec un mot de passe en texte brut à fournir à wp_signon