web-dev-qa-db-fra.com

wp-login.php - redirige les utilisateurs connectés vers une URL personnalisée

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?

1

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:

  • Un appel à 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.
  • Il y a une vérification pour voir si l'utilisateur actuel peut réellement accéder à la zone d'administration avant de les rediriger là.

Voici ce petit extrait sous forme de plugin .

3
chrisguitarguy

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();
1
Manoj Kumar