Добавление ссылки на логаут без перехода к странице подтверждения

Логаут-функция в WordPress использует одноразовые токены для безопасности (которые носят название nonce), поэтому если вы попытаетесь перейти по адресу yoursite.com/wp-login.php?action=logout, то вам будет выведена на экран страница с подтверждением выхода из системы.

Это не слишком удобно, но, к счастью, есть способ избежать появления этой страницы.

С помощью функции wp_logout_url в сочетании с wp_nav_menu_items мы можем добавить ссылку на логаут в любое меню, причем пользователю не придется подтверждать, что он действительно хочет выйти из системы, поскольку функция автоматически добавляет одноразовый токен к ссылке.

// ссылка на логаут в меню

function diww_menu_logout_link( $nav, $args ) {
	$logoutlink = '<li><a href="'.wp_logout_url().'">Logout</a></li>';
	if( $args->menu->term_id == '5' ) {
		return $nav.$logoutlink ;
	} else {
	return $nav;
	}
}

add_filter('wp_nav_menu_items','diww_menu_logout_link', 10, 2);

Все, что вам понадобится – это изменить ID меню (в данном случае 5). Если вы не знаете ID вашего меню, но знаете theme_location вашего меню, в таком случае воспользуйтесь следующей функцией:


// ссылка на логаут в меню

function diww_menu_logout_link( $nav, $args ) {
	$logoutlink = '<li><a href="'.wp_logout_url().'">Logout</a></li>';
	if( $args->theme_location == 'primary' ) {
		return $nav.$logoutlink ;
	} else {
	return $nav;
	}
}

add_filter('wp_nav_menu_items','diww_menu_logout_link', 10, 2);

Вы можете также указать, на какую страницу будет переноситься пользователь после логаута. Измените $logoutlink на следующее:

$logoutlink = '<li><a href="'.wp_logout_url( home_url() ).'">Logout</a></li>'; // перенаправление на главную
$logoutlink = '<li><a href="'.wp_logout_url( get_permalink() ).'">Logout</a></li>'; // оставаться на той же странице
$logoutlink = '<li><a href="'.wp_logout_url( 'http://www.doitwithwp.com/about/' ).'">Logout</a></li>'; // переход к определенному URL

Источник: doitwithwp.com

Блог про WordPress
Комментарии: 2
  1. Виктор

    Третий код, вторая строка.
    Вместо get_permalink() надо использовать

    Имеем (полностью код не пишу):
    .wp_logout_url( get_permalink() ).

    Получим:
    .wp_logout_url( $current_page ).

    Перед этой строкой обязательно надо прописать получение текущего URL:
    $current_page = $_SERVER[‘REQUEST_URI’];

    1. Дмитрий (автор)

      Спасибо за замечание. Пусть будет в комментариях, пока кто-нибудь не проверит.

Добавить комментарий

Получать новые комментарии по электронной почте.