Aggiungere il link "Logout" 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 logout diretto?
Puoi ottenere questo risultato utilizzando l'hook wp_nav_menu_items
. Diamo un'occhiata al seguente pezzo di codice che mostra il link di login/logout nella posizione del menu primary
.
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;
}
Ecco cosa abbiamo implementato nell'esempio sopra.
- Prima abbiamo aggiunto un filtro per l'hook
wp_nav_menu_items
e collegato una funzione ad esso. - Dopo aver verificato la posizione del tema
primary
, abbiamo controllato se l'utente è loggato o meno. - Se loggato, abbiamo mostrato il link
Log Out
, altrimenti il linkLog In
. - Abbiamo passato il permalink della pagina attualmente visualizzata all'url di login in modo che l'utente venga reindirizzato alla pagina corrente dopo il login effettuato con successo.
- Abbiamo utilizzato
class="right"
nel codice sopra per soddisfare la tua richiesta.
Puoi trovare una spiegazione dettagliata su questo blog.

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

Se sei flessibile nell'aggiungere un plugin per ottenere questa funzionalità, potresti usare: https://wordpress.org/plugins/login-logout-register-menu/
Aggiunge semplicemente una sezione molto pratica nel costruttore dei menu. Puoi combinarlo con un altro plugin per limitare quali voci di menu vengono mostrate agli utenti loggati, quali a quelli non loggati e quali a tutti.

Il mio menu nel footer è un widget, quindi ho avuto difficoltà a utilizzare il codice di Chittaranjan. La seguente versione modificata funziona per me. Ho anche modificato i link rendendoli "dinamici": il login porta a una pagina a scelta, il logout rimarrà sulla pagina corrente o reindirizzerà alla home se la pagina corrente è la tua pagina di login (privata). Idealmente dovrebbe verificare se la tua pagina di login è 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) .'">'. __("Disconnetti") .'</a></li>';
} else {
$items .= '<li class="right"><a href="'. wp_login_url($loginlink) .'">'. __("Accedi") .'</a></li>';
}
}
return $items;
}
