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?


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 .


@ 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


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

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.