Ajouter le lien «Déconnexion» au menu de navigation

16

Comment puis-je ajouter un lien vers le menu de navigation principal avec l' class="right"attribut?

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

Zach Russell
la source
1
Avez-vous vu des questions et réponses existantes comme celle-ci ?
fuxia
Vous avez vu wp_loginout()?
kaiser
2
J'ai supprimé la réponse acceptée, car elle a été plagiée sur ce site sans attribution.
fuxia
J'ai fini par utiliser quelque chose de similaire; au moins en utilisant la fonction loginout (). Je posterai exactement ce que j'ai fait la prochaine fois que je serai devant mon ordinateur. Merci @toscho
Zach Russell
Vous pouvez utiliser ce plugin gratuit wordpress.org/plugins/login-logout-register-menu pour y parvenir facilement.
Vinod Dalvi

Réponses:

39

Vous pouvez y parvenir en utilisant le wp_nav_menu_itemscrochet. Jetons un coup d'œil au morceau de code suivant qui montre le lien de connexion / déconnexion à l' primaryemplacement du menu.

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 implémenté dans l'exemple ci-dessus.

  1. D'abord ajouté un filtre pour le wp_nav_menu_itemscrochet et y attaché une fonction.
  2. Après avoir vérifié l' primaryemplacement du thème, nous avons vérifié si l'utilisateur est connecté ou non.
  3. Si vous êtes connecté, nous avons montré le Log Outlien sinon le Log In lien.
  4. Nous avons transmis le permalien de la page actuellement affichée à l'URL de connexion afin que l'utilisateur soit redirigé vers la page actuelle après une connexion réussie.
  5. Nous avons utilisé le class="right"code ci-dessus pour répondre à vos besoins.

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

Chittaranjan
la source
@ timo-s dans le thème Vingt Dix - sept (enfant) cela ne fonctionnera uniquement avec un topemplacement de menu: if ($args->theme_location == 'top').
Iurie Malai
l'emplacement devait être pour moiprimary-menu
Toskan
2

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

Marcelo Oliveira
la source
1
Cela présente à l'utilisateur le message "Êtes-vous sûr de vouloir vous déconnecter?" rapide, car le nonce est manquant.
cale_b
0

Mon menu de pied de page est un widget , j'ai donc eu du mal à utiliser le code de Chittaranjan. La version édité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 restera soit sur la page actuelle, soit envoyée à la maison, si la page actuelle est votre page de connexion (privée). Idéalement, cela vérifierait si votre page de connexion est réellement privée, mais je ne sais pas comment faire, 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;
}
Ralf
la source
-2
add_filter( 'wp_nav_menu_items', 'add_loginout_link', 15, 5 );

function add_loginout_link( $menus, $args ) {

  if (is_user_logged_in() && $args->theme_location == 'primary') {

   $menus .= '<li><a href="'. wp_logout_url( get_permalink( woocommerce_get_page_id( 'myaccount' ) ) ) .'">Log Out</a></li>';
    }

  elseif (!is_user_logged_in() && $args->theme_location == 'primary') {

   $menus .= '<li><a href="' . get_permalink( woocommerce_get_page_id( 'myaccount' ) ) . '">Log In</a></li>';
  }

  return $menus;
}
Ankush Samyal
la source
Vous devez formater votre code en utilisant 4 espaces au début de chaque ligne (voir l'aide).
Peter HvD
Veuillez ne pas annoncer votre site Web. Veuillez modifier votre réponse en expliquant comment ce bloc de code répond à la question posée, où l'ajouter et ce qu'il fait spécifiquement.
Howdy_McGee