Как убрать активную ссылку на текущую страницу? Такой вот вопрос у меня возник не давно. Поэтому и решил опубликовать эту заметку.
Для чего это делается? Распределение статического веса страниц на сайте. Считается, что ссылка со страницы на саму себя впустую расходует ее статический вес и уменьшает его для других ссылок. Многие об этом уже писали, не буду заострять внимание на этом. Тем более, если Вы уже задались вопросом как это сделать, значит и сами все знаете.
И так. Убираем ссылку из меню. Есть способ переписать функцию 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' );
Вот и все. Надеюсь кому-нибудь мое решение окажется полезным.
Спасибо за внимание. :)