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?


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 .


@ 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


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;
}

-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;
}

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.