Dodaj link „Wyloguj” do menu nawigacji

16

Jak mogę dodać link do głównego menu nawigacyjnego za pomocą class="right"atrybutu?

Próbowałem dodać link statyczny, example.com/wp-logout.php?action=logoutale prowadzi to do strony potwierdzenia wylogowania. Czy jest jakiś sposób, aby uczynić go linkiem do wylogowania?

Zach Russell
źródło
1
Widziałeś istniejących pytań i odpowiedzi, jak ten jeden ?
fuxia
Widziałeś wp_loginout()?
kaiser
2
Usunąłem zaakceptowaną odpowiedź, ponieważ była plagiatem z tej strony bez przypisania.
fuxia
Skończyło się na czymś podobnym; przynajmniej używając funkcji loginout (). Opublikuję dokładnie to, co zrobiłem następnym razem, gdy będę przed komputerem. Dzięki @toscho
Zach Russell,
Możesz użyć tej darmowej wtyczki wordpress.org/plugins/login-logout-register-menu, aby łatwo osiągnąć ten sam cel.
Vinod Dalvi

Odpowiedzi:

39

Możesz to osiągnąć za pomocą wp_nav_menu_itemshaka. Rzućmy okiem na następujący fragment kodu, który pokazuje link do logowania / wylogowania w primarylokalizacji 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;
}

Właśnie to wdrożyliśmy w powyższym przykładzie.

  1. Najpierw dodałem filtr do wp_nav_menu_itemshaka i podłączyłem do niego funkcję.
  2. Po sprawdzeniu primarylokalizacji motywu sprawdziliśmy, czy użytkownik jest zalogowany, czy nie.
  3. Po zalogowaniu pokazaliśmy Log Outlink, w przeciwnym razie Log In link.
  4. Przekazaliśmy bezpośredni link aktualnie oglądanej strony do adresu URL logowania, aby użytkownik został przekierowany na bieżącą stronę po udanym zalogowaniu.
  5. Użyliśmy class="right"powyższego kodu, aby spełnić Twoje wymagania.

Szczegółowe wyjaśnienie znajdziesz na tym blogu .

Chittaranjan
źródło
@ timo-ów w dwudziestym Seventeen (dziecko) tematu to będzie działać tylko z toppołożenia menu: if ($args->theme_location == 'top').
Iurie Malai
lokalizacja musiała być dla mnieprimary-menu
Toskan
2

Spróbuj dodać niestandardowy link do http://example.com/wp-login.php?action=logout To zadziałało dla mnie!

Marcelo Oliveira
źródło
1
To pokazuje użytkownikowi komunikat „Czy na pewno chcesz się wylogować?” szybka, ze względu na brak numeru jednorazowego.
cale_b
0

Moje menu stopki jest widżetem , dlatego miałem problemy z użyciem kodu Chittaranjan. Poniższa edytowana wersja działa dla mnie. Zmieniłem również linki i uczyniłem je „dynamicznymi”: logowanie prowadzi do wybranej strony, wylogowanie pozostanie na bieżącej stronie lub wyśle ​​do domu, jeśli bieżąca strona to (prywatna) strona logowania. Idealnie byłoby sprawdzić, czy twoja strona logowania jest rzeczywiście prywatna, ale nie wiem jak to zrobić, przepraszam.

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
źródło
-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
źródło
Musisz sformatować kod za pomocą 4 spacji na początku każdej linii (patrz pomoc).
Peter HvD,
Nie reklamuj swojej witryny. Edytuj swoją odpowiedź, wyjaśniając, w jaki sposób ten blok kodu odpowiada na pytanie, gdzie go dodać i co konkretnie robi.
Howdy_McGee