Убрать Ссылку на Саму Себя в WordPress

Как убрать активную ссылку на текущую страницу? Такой вот вопрос у меня возник не давно. Поэтому и решил опубликовать эту заметку.

Для чего это делается? Распределение статического веса страниц на сайте. Считается, что ссылка со страницы на саму себя впустую расходует ее статический вес и уменьшает его для других ссылок. Многие об этом уже писали, не буду заострять внимание на этом. Тем более, если Вы уже задались вопросом как это сделать, значит и сами все знаете.

И так. Убираем ссылку из меню. Есть способ переписать  функцию start_el обхода класса Walker_Nav_Menu. Не помню кому принадлежит эта идея, поэтому ссылку на источник дать не могу, но кому-то из зарубежных коллег.

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

Просмотрев класс Walker_Nav_Menu, родилось до безобразия простое решение:

Открываем файл functions.php своего шаблона и вставляем туда следующие строчки:

function yourstheme_menu_link_attributes( $args ) {
	global $wp;
	//$current_url - Текущая страница.
	$current_url = trailingslashit(add_query_arg( $_SERVER['QUERY_STRING'], '', home_url( $wp->request ) ) );
	if($current_url == $args['href']){
		$args['href'] = '';
	}
	return $args;
}
add_filter( 'nav_menu_link_attributes', 'yourstheme_menu_link_attributes' );

UPD. Учтите, что trailingslashit будет добавлять слеш к окончанию текущего url. Поэтому если у Вас пермалинки настроены без слеша на конце url (т.е. типа /%postname%.html ), тогда эту строчку нужно подкорректировать примерно так:

$current_url = add_query_arg( $_SERVER['QUERY_STRING'], '', home_url( $wp->request ) );

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

Универсальный вариант:

function yourstheme_menu_link_attributes( $args ) {
	global $wp;
	$current_url	= untrailingslashit(add_query_arg( $_SERVER['QUERY_STRING'], '', home_url( $wp->request ) ) );
	$href		= untrailingslashit( $args['href']);
	if($current_url == $href){
		$args['href'] = '';		 
	}
	return $args;
}
add_filter( 'nav_menu_link_attributes', 'yourstheme_menu_link_attributes' );

Вот и все. Надеюсь кому-нибудь мое решение окажется полезным.

Спасибо за внимание. :)

Запись опубликована в рубрике: Wordpress.

Комментарии