it-swarm.dev

Aggiungi il link "Esci" al menu di navigazione

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

Ho provato ad aggiungere un link statico a example.com/wp-logout.php?action=logout ma questo porta a una pagina di conferma del logout. C'è un modo per renderlo un link di disconnessione?

15
Zach Russell

È possibile ottenere ciò utilizzando l'hook wp_nav_menu_items. Diamo un'occhiata alla seguente parte di codice che mostra il collegamento login/logout nella posizione del menu primaryname__.

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 ho aggiunto un filtro per il gancio wp_nav_menu_items e ho allegato una funzione.
  2. Dopo aver controllato la posizione del tema primaryname__, abbiamo controllato se l'utente è loggato o meno.
  3. Se loggato, abbiamo mostrato il link Log Out altrimenti il ​​link Log In.
  4. Abbiamo passato il permalink della pagina attualmente visualizzata all'URL di accesso in modo che l'utente venga reindirizzato alla pagina corrente dopo il login riuscito.
  5. Abbiamo usato class="right" al codice sopra per soddisfare i tuoi requisiti.

Puoi trovare una spiegazione dettagliata su questo blog .

35
Chittaranjan

Prova ad aggiungere un link personalizzato con http://example.com/wp-login.php?action=logout Ha funzionato per me!

2
Marcelo Oliveira

Il mio menu a piè di pagina è un widget , quindi ho avuto difficoltà nell'usare il codice di Chittaranjan. La seguente versione modificata funziona per me. Ho anche modificato i collegamenti e li ho resi "dinamici": l'accesso porta 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 controllerebbe se la tua pagina di accesso è effettivamente privata, ma non so come farlo, mi dispiace.

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