Lorsqu'un utilisateur se connecte, nous pouvons facilement modifier l'URL de redirection (voir this , this ou this ), mais si l'utilisateur accède à /wp-login.php
, il sera redirigé vers le tableau de bord s’ils sont déjà connectés .
Ma question est la suivante: lorsque l’utilisateur visite /wp-login.php
et est déjà connecté, comment puis-je les rediriger vers une URL personnalisée?
La meilleure façon de comprendre ce qui se passe pour un problème comme celui-ci est d'aller à la source. Littéralement.
Examinez wp-login.php
et recherchez une action qui se déclenche avant tout rendu HTML. Le crochet que vous recherchez est login_init
. Ajoutez-lui un rappel, vérifiez si l'utilisateur est connecté et redirigez-le si c'est le cas.
Le seul autre problème ici est que wp-login.php
gère également la déconnexion. Vous devez donc vérifier la variable global $action
pour vous assurer qu’une déconnexion n’est pas en cours.
add_action('login_init', 'wpse187831_redir_loggedin');
function wpse187831_redir_loggedin()
{
global $action;
if ('logout' === $action || !is_user_logged_in()) {
return;
}
wp_redirect(apply_filters(
'wpse187831_loggedin_redirect',
current_user_can('read') ? admin_url() : home_url(),
wp_get_current_user()
), 302);
exit;
}
Il y a un peu de choses supplémentaires ici:
apply_filters
afin que les autres plugins puissent se connecter et modifier ma redirection s'ils le souhaitent. Ce filtre obtient la redirection elle-même ainsi que l'utilisateur actuel.Voici ce petit extrait sous forme de plugin .
Vous pouvez vérifier si la page en cours est connectée ou non à l'aide de la variable globale $pagenow
et de la fonction wp_redirect()
à l'URL personnalisée dans la condition is_user_logged_in
.
function redirect_logged_in_user()
{
if( is_user_logged_in ) {
wp_redirect('http://customurl');
}
}
global $pagenow;
if( $pagenow == 'wp-login.php')
redirect_logged_in_user();