Fügen Sie dem Navigationsmenü den Link „Abmelden“ hinzu

16

Wie kann ich einen Link zum primären Navigationsmenü mit dem class="right"Attribut hinzufügen ?

Ich habe versucht, einen statischen Link hinzuzufügen, der example.com/wp-logout.php?action=logoutjedoch zu einer Seite zur Bestätigung der Abmeldung führt. Gibt es eine Möglichkeit, einen Abmeldelink zu erstellen?

Zach Russell
quelle
1
Haben Sie bereits Fragen und Antworten wie diese gesehen ?
fuxia
Hast du gesehen wp_loginout()?
Kaiser
2
Ich habe die akzeptierte Antwort entfernt, da sie von dieser Site ohne Zuschreibung kopiert wurde.
Fuxia
Am Ende habe ich etwas Ähnliches benutzt. Zumindest mit der loginout () Funktion. Ich werde genau das posten, was ich getan habe, wenn ich das nächste Mal vor meinem Computer stehe. Thanks @toscho
Zach Russell
Sie können dieses kostenlose Plugin wordpress.org/plugins/login-logout-register-menu verwenden , um dasselbe auf einfache Weise zu erreichen.
Vinod Dalvi

Antworten:

39

Dies erreichen Sie mit dem wp_nav_menu_itemsHaken. Schauen wir uns den folgenden Code an, der den Login / Logout-Link auf der primaryMenüposition zeigt.

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

Dies ist, was wir im obigen Beispiel implementiert haben.

  1. Zuerst wurde ein Filter für wp_nav_menu_itemshook hinzugefügt und eine Funktion hinzugefügt .
  2. Nach der Überprüfung des primarySpeicherorts des Themas haben wir überprüft, ob der Benutzer angemeldet ist oder nicht.
  3. Wenn eingeloggt, haben wir den Log OutLink angezeigt, ansonsten den Log In Link.
  4. Wir haben den Permalink der aktuell angezeigten Seite an die Anmelde-URL übergeben, damit der Benutzer nach erfolgreicher Anmeldung auf die aktuelle Seite umgeleitet wird.
  5. Wir haben class="right"den obigen Code verwendet, um Ihre Anforderung zu erfüllen.

Eine ausführliche Erklärung finden Sie in diesem Blog .

Chittaranjan
quelle
@ timo-s in dem zwanzig Seventeen (Kind) Thema wird diese Arbeit nur mit einem topMenü Standort: if ($args->theme_location == 'top').
Iurie Malai
Ort musste für mich seinprimary-menu
Toskan
2

Versuchen Sie, einen benutzerdefinierten Link mit http://example.com/wp-login.php?action=logout hinzuzufügen. Bei mir hat es funktioniert!

Marcelo Oliveira
quelle
1
Dadurch wird dem Benutzer die Meldung "Möchten Sie sich wirklich abmelden?" Angezeigt. prompt, aufgrund der Tatsache, dass die Nonce fehlt.
cale_b
0

Mein Fußzeilenmenü ist ein Widget , daher hatte ich Schwierigkeiten, den Code von Chittaranjan zu verwenden. Die folgende bearbeitete Version funktioniert für mich. Ich habe auch die Links geändert und sie "dynamisch" gemacht: Die Anmeldung führt zu einer Seite Ihrer Wahl, die Abmeldung bleibt entweder auf der aktuellen Seite oder wird nach Hause gesendet, wenn die aktuelle Seite Ihre (private) Anmeldeseite ist. Im Idealfall wird überprüft, ob Ihre Anmeldeseite tatsächlich privat ist, aber ich weiß nicht, wie das geht, sorry.

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
quelle
-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
quelle
Sie müssen Ihren Code mit 4 Leerzeichen am Anfang jeder Zeile formatieren (siehe Hilfe).
Peter HvD
Bitte machen Sie keine Werbung für Ihre Website. Bitte bearbeiten Sie Ihre Antwort mit einer Erklärung, wie dieser Codeblock die vorliegende Frage beantwortet, wo er hinzugefügt werden soll und was er konkret tut.
Howdy_McGee