Wordpress - How to log out without confirmation 'Do you really want to log out?"?
This happens because you are missing the neccessary nonce in the URL, which is being checked in wp-login.php
case 'logout' :
check_admin_referer('log-out');
...
Use wp_logout_url
in order to retreive the URL including the nonce. If you want to redirect to a custom URL, simply pass it as an argument.
<a href="<?php echo wp_logout_url('/redirect/url/goes/here') ?>">Log out</a>
You could also use wp_loginout
which generates the link for you including translation:
echo wp_loginout('/redirect/url/goes/here')
If you can't use wp_logout_url()
function, You can turn off this validation using this code:
add_action('check_admin_referer', 'logout_without_confirm', 10, 2);
function logout_without_confirm($action, $result)
{
/**
* Allow logout without confirmation
*/
if ($action == "log-out" && !isset($_GET['_wpnonce'])) {
$redirect_to = isset($_REQUEST['redirect_to']) ? $_REQUEST['redirect_to'] : 'url-you-want-to-redirect';
$location = str_replace('&', '&', wp_logout_url($redirect_to));
header("Location: $location");
die;
}
}
Replace 'url-you-want-to-redirect'
with the URL you want to redirect after logout.
Add it in your functions.php
If you create a custom link in your menu, set the label to “Logout”
, and set the URL to http://yourdomain.com/wp-login.php?action=logout
. Then add this function to your functions.php
file:
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');
If you want to redirect to the login page after logout then you should append login URL as:
$item->url = $item->url . "&_wpnonce=" . wp_create_nonce( 'log-out' ).'&redirect_to='.wp_login_url();
Reference link
** tried that did not work. Really want to log out page then 4 something went wrong when clicking the button.