web-dev-qa-db-fra.com

Ajouter le lien "Déconnexion" au menu de navigation

Comment ajouter un lien au menu de navigation principal avec l'attribut class="right"?

J'ai essayé d'ajouter un lien statique à example.com/wp-logout.php?action=logout, mais cela mène à une page de confirmation de déconnexion. Y a-t-il un moyen d'en faire un lien de déconnexion?

15
Zach Russell

Vous pouvez y parvenir en utilisant le hook wp_nav_menu_items. Jetons un coup d'oeil au morceau de code suivant qui montre le lien de connexion/déconnexion sur l'emplacement du menu primary.

add_filter( 'wp_nav_menu_items', 'wti_loginout_menu_link', 10, 2 );

function wti_loginout_menu_link( $items, $args ) {
   if ($args->theme_location == 'primary') {
      if (is_user_logged_in()) {
         $items .= '<li class="right"><a href="'. wp_logout_url() .'">'. __("Log Out") .'</a></li>';
      } else {
         $items .= '<li class="right"><a href="'. wp_login_url(get_permalink()) .'">'. __("Log In") .'</a></li>';
      }
   }
   return $items;
}

C'est ce que nous avons mis en œuvre dans l'exemple ci-dessus.

  1. D'abord ajouté un filtre pour wp_nav_menu_items hook et attaché une fonction à celui-ci.
  2. Après avoir vérifié l’emplacement du thème primary, nous avons vérifié si l’utilisateur est connecté ou non.
  3. Si vous êtes connecté, nous avons affiché le lien Log Out sinon le lien Log In.
  4. Nous avons transmis le lien permanent de la page en cours de visualisation à l'URL de connexion afin que l'utilisateur soit redirigé vers la page en cours une fois la connexion établie.
  5. Nous avons utilisé le class="right" du code ci-dessus pour répondre à vos besoins.

Vous pouvez trouver une explication détaillée sur ce blog .

35
Chittaranjan

Ajoutez un lien personnalisé avec http://example.com/wp-login.php?action=logout Cela a fonctionné pour moi!

2
Marcelo Oliveira

Mon menu de pied de page est un widget , donc j’ai eu des difficultés à utiliser le code de Chittaranjan. La version modifiée suivante fonctionne pour moi. J'ai également changé les liens et les ai rendus "dynamiques": la connexion mène à une page de votre choix, la déconnexion reste soit sur la page actuelle, soit envoyée à la maison, si la page actuelle est votre page de connexion (privée). Idéalement, il vérifierait si votre page de connexion est réellement privée, mais je ne sais pas comment faire cela, désolé.

add_filter( 'wp_nav_menu_items', 'wti_loginout_menu_link', 10, 2 );

function wti_loginout_menu_link( $items, $args ) {
    //var_dump($args);
    if (($args->menu->slug == 'footer')) {
        if (is_user_logged_in()) {
            $loginlink = '/your-private-page';
            $logoutlink = get_permalink();
            if (strpos($logoutlink, $loginlink) !== false) {
                $logoutlink = '/';
            }
            $items .= '<li class="right"><a href="'. wp_logout_url($logoutlink) .'">'. __("Log Out") .'</a></li>';
        } else {
            $items .= '<li class="right"><a href="'. wp_login_url($loginlink) .'">'. __("Log In") .'</a></li>';
        }
    }
    return $items;
}
0
Ralf