Ответы:
Это происходит потому, что вы пропустили необходимый одноразовый номер в URL, который проверяется в wp-login.php
case 'logout' :
check_admin_referer('log-out');
...
Используйте wp_logout_url
для того, чтобы получить URL, включая nonce. Если вы хотите перенаправить на пользовательский URL, просто передайте его в качестве аргумента.
<a href="<?php echo wp_logout_url('/redirect/url/goes/here') ?>">Log out</a>
Вы также можете использовать, wp_loginout
который генерирует ссылку для вас, включая перевод:
echo wp_loginout('/redirect/url/goes/here')
wp_logout_url( get_permalink())
и страница подтверждения не обойдена. Одноразовый номер генерируется как часть URL, но я все еще отправляюсь на страницу подтверждения
Если вы не можете использовать wp_logout_url()
функцию, вы можете отключить эту проверку с помощью этого кода:
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;
}
}
Замените 'url-you-want-to-redirect'
на URL, который вы хотите перенаправить после выхода из системы.
Добавьте его в свой functions.php
Если вы создаете пользовательскую ссылку в вашем меню, установите метку на “Logout”
и установите URL на http://yourdomain.com/wp-login.php?action=logout
. Затем добавьте эту функцию в ваш 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');
Если вы хотите перенаправить на страницу входа после выхода из системы, вы должны добавить URL для входа в систему как:
$item->url = $item->url . "&_wpnonce=" . wp_create_nonce( 'log-out' ).'&redirect_to='.wp_login_url();
Это сработало для меня, добавив /?customer-logout=true
в конце.
http://www.website.com/?customer-logout=true