Come effettuare il logout senza la conferma "Vuoi veramente effettuare il logout?"
Attualmente quando effettuo il logout tramite:
<a href="<?php bloginfo('url'); ?>/wp-login.php?action=logout">Logout</a>
vengo reindirizzato a una pagina dove devo confermare il logout.
Come posso eliminare la conferma e reindirizzare alla homepage dopo il logout?

Questo accade perché manca il necessario nonce nell'URL, che viene verificato in wp-login.php
case 'logout' :
check_admin_referer('log-out');
...
Utilizza wp_logout_url
per ottenere l'URL incluso il nonce. Se vuoi reindirizzare a un URL personalizzato, basta passarlo come argomento.
<a href="<?php echo wp_logout_url('/redirect/url/goes/here') ?>">Esci</a>
Puoi anche usare wp_loginout
che genera automaticamente il link includendo la traduzione:
echo wp_loginout('/redirect/url/goes/here')

echo wp_loginout('/redirect/url/goes/here') funziona correttamente..

Sto usando wp_logout_url( get_permalink())
ma la pagina di conferma non viene bypassata. Il nonce viene generato come parte dell'URL ma vengo comunque reindirizzato alla pagina di conferma

Se non puoi utilizzare la funzione wp_logout_url()
, puoi disattivare questa validazione utilizzando questo codice:
add_action('check_admin_referer', 'logout_without_confirm', 10, 2);
function logout_without_confirm($action, $result)
{
/**
* Permette il logout senza conferma
*/
if ($action == "log-out" && !isset($_GET['_wpnonce'])) {
$redirect_to = isset($_REQUEST['redirect_to']) ? $_REQUEST['redirect_to'] : 'url-di-redirect-desiderata';
$location = str_replace('&', '&', wp_logout_url($redirect_to));
header("Location: $location");
die;
}
}
Sostituisci 'url-di-redirect-desiderata'
con l'URL a cui vuoi reindirizzare dopo il logout.
Aggiungilo nel tuo file functions.php

Questo funziona per il logout senza validazione, ma non reindirizza all'URL che desidero.

@PhuNguyen Devi solo aggiungere l'URL di reindirizzamento alla richiesta di redirect in quel codice dove ci sono gli apici ' ', dopo i due punti.

ci sono implicazioni per la sicurezza rimuovendo questa validazione?

@user1264304 Credo che del codice JS malevolo caricato nel browser potrebbe in qualche modo reindirizzare alla pagina di login, ma tutto ciò che farà sarà disconnettere l'utente. Un codice veramente malevolo probabilmente cercherebbe di sostituire l'URL prima di un nonce valido. L'utente potrebbe navigare su un altro sito che poi ha un link alla pagina di logout del sito corrente - assumendo che l'altro sito sia consapevole che l'utente abbia una relazione con esso. Di nuovo, nessuna conseguenza se non la disconnessione dell'utente. Non l'ho mai visto accadere. Quindi, per rispondere alla tua domanda, Non penso ci sia un'implicazione di sicurezza nella rimozione della validazione.

Soluzione eccellente per me soprattutto perché non richiede PHP aggiuntivo sulla mia pagina di logout. Uso semplicemente questo link: wp-login.php?action=logout E come reindirizzamento, uso home_url() così funziona su qualsiasi sito.

Possiamo sicuramente usare wp_logout_url. Ecco cosa ti serve:
$location = str_replace('&', '&', wp_logout_url($redirect_to));
Basta reindirizzare a quella $location e verrai disconnesso senza conferma.

Questa è un'ottima soluzione per me, ma ho notato che non reindirizza. Vengo semplicemente riportato alla pagina home...

Se crei un link personalizzato nel tuo menu, imposta l'etichetta su "Logout"
e l'URL su http://yourdomain.com/wp-login.php?action=logout
. Poi aggiungi questa funzione al tuo file functions.php
:
function change_menu($items){
foreach($items as $item){
if( $item->title == "Logout"){
$item->url = $item->url . "&_wpnonce=" . wp_create_nonce( 'log-out' );
}
}
return $items;
}
add_filter('wp_nav_menu_objects', 'change_menu');
Se vuoi reindirizzare alla pagina di login dopo il logout, dovresti aggiungere l'URL di login in questo modo:
$item->url = $item->url . "&_wpnonce=" . wp_create_nonce( 'log-out' ).'&redirect_to='.wp_login_url();
** provato ma non ha funzionato. Ottengo una pagina di logout e poi un messaggio "qualcosa è andato storto" quando clicco il pulsante.

Questo ha funzionato perfettamente per me, incluso il reindirizzamento. Devi fare attenzione a usare la formattazione PHP corretta per aggiungere un link. Ecco il mio codice per quella riga: $item->url = $item->url . "&_wpnonce=" . wp_create_nonce( 'log-out' ).'&redirect_to='.'https://google.com';

Se stai utilizzando il tema WordPress starter roots/sage, o qualsiasi altro tema che utilizza il motore di templating Blade di Laravel, assicurati di non eseguire l'escape dell'URL:
// non fare
<a href="{{ wp_logout_url(get_permalink()) }}">esci</a>
// ma invece
<a href="{!! wp_logout_url(get_permalink()) !!}">esci</a>
Il primo esempio esegue l'escape di tutti i caratteri HTML, mentre il secondo no.

Questo è davvero un bel po' di hacking. Che ne dici di questo: https://wpsandbox.net/wordpress/custom-logout-link-wordpress-p1498
