Aggiungi il link "Logout" al menu di navigazione


16

Come posso aggiungere un collegamento al menu di navigazione principale con l' class="right"attributo?

Ho provato ad aggiungere un collegamento statico example.com/wp-logout.php?action=logoutma che porta a una pagina di conferma del logout. Esiste un modo per renderlo un collegamento di disconnessione?


1
Hai visto domande e risposte esistenti come questa ?
fuxia

Hai visto wp_loginout()?
Kaiser,

2
Ho rimosso la risposta accettata, perché è stata plagiata da questo sito senza attribuzione.
fuxia

Ho finito per usare qualcosa di simile; almeno usando la funzione loginout (). Pubblicherò esattamente quello che ho fatto la prossima volta che sarò di fronte al mio computer. Grazie @toscho
Zach Russell,

Puoi usare questo plugin gratuito wordpress.org/plugins/login-logout-register-menu per ottenere lo stesso facilmente.
Vinod Dalvi,

Risposte:


39

Puoi farlo usando il wp_nav_menu_itemsgancio. Diamo un'occhiata al seguente codice che mostra il collegamento login / logout nella primaryposizione del 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;
}

Questo è ciò che abbiamo implementato nell'esempio sopra.

  1. Per prima cosa ha aggiunto un filtro per wp_nav_menu_itemshook e ha collegato una funzione ad esso.
  2. Dopo aver verificato la primaryposizione del tema, abbiamo verificato se l'utente ha effettuato l'accesso o meno.
  3. Se hai effettuato l'accesso, abbiamo mostrato il Log Outlink altrimenti il Log In link.
  4. Abbiamo passato il permalink della pagina attualmente visualizzata all'URL di accesso in modo tale che l'utente verrà reindirizzato alla pagina corrente dopo aver effettuato correttamente l'accesso.
  5. Abbiamo utilizzato il class="right"codice sopra riportato per soddisfare le tue esigenze.

Puoi trovare una spiegazione dettagliata su questo blog .


@ Timo-s In (bambino) tema Twenty Seventeen questo funziona solo con una topposizione del menu: if ($args->theme_location == 'top').
Iurie Malai,

la posizione doveva essere per meprimary-menu
Toskan,


0

Il mio menu a piè di pagina è un widget , quindi ho avuto difficoltà a utilizzare il codice di Chittaranjan. La seguente versione modificata funziona per me. Ho anche modificato i collegamenti e li ho resi "dinamici": il login conduce a una pagina di tua scelta, il logout rimarrà sulla pagina corrente o verrà inviato a casa, se la pagina corrente è la tua pagina di accesso (privata). Idealmente verificherebbe se la tua pagina di accesso è in realtà privata, ma non so come farlo, scusa.

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

È necessario formattare il codice utilizzando 4 spazi all'inizio di ogni riga (consultare la guida).
Peter HvD,

Si prega di non pubblicizzare il tuo sito Web. Modifica la tua risposta con una spiegazione su come questo blocco di codice risponde alla domanda attuale, dove aggiungerla e cosa fa nello specifico.
Howdy_McGee
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.