Удаляем ссылку у текущего пункта меню WordPress
Очень часто в техническом задании на создание шаблона для WordPress значится пункт: “Не должно быть циклических ссылок”. Это означает, что, когда мы находимся на какой-либо странице, на ней не должно быть ссылок на саму себя.
Чтобы выполнить данное требование для меню WordPress, существует решение, которое с помощью регулярного выражения вырезает ссылку текущей страницы, оставляя только текстовое название пункта.
На мой взгляд, это некрасивое решение, и я предлагаю взамен следующее – удалять у ссылки атрибут href
.
В спецификации HTML 5 обозначена следующая информация на этот счет:
If the
a
element has nohref
attribute, then the element represents a placeholder for where a link might otherwise have been placed, if it had been relevant, consisting of just the element’s contents.
Здесь сказано, что ссылка, не имеющая атрибута href
, когда это уместно, является плейсхолдером (замещающим элементом) для полноценной ссылки. И это как раз наш случай.
Таким образом, ссылка без href
соответствует стандарту, к тому же является валидной. При этом она по сути перестает быть ссылкой: у нее отсутствует соответствующий курсор, по ней нельзя никуда перейти, не работает псевдокласс :link
и нет подчеркивания.
Вот код, который решает поставленную задачу (его необходимо поместить в файл functions.php вашей темы):
function wp_nav_menu_no_current_link( $atts, $item, $args, $depth ) {
if ( $item->current ) $atts['href'] = '';
return $atts;
}
add_action( 'nav_menu_link_attributes', 'wp_nav_menu_no_current_link', 10, 4 );
Если есть необходимость применить это только для конкретного меню, то код будет таким:
function wp_nav_menu_no_current_link( $atts, $item, $args, $depth ) {
if ( $args->theme_location == 'menu_name' ) {
if ( $item->current ) $atts['href'] = '';
}
return $atts;
}
add_action( 'nav_menu_link_attributes', 'wp_nav_menu_no_current_link', 10, 4 );
Здесь menu_name
– это идентификатор, который указывается в функции register_nav_menu()
и в параметре theme_location
функции wp_nav_menu()
.
Комментарии (8)
Здравствуйте Дмитрий!
Примите мою большую благодарность, за данный код…
Я перепробовал много разных вариантов – работает только Ваш.
Сохраню ка я сайт в закладках – уверен, что ещё не раз пригодится… ☺
Реально спасибо, работает как надо)
Добрый день! Первый код нормальный. Но, если проверяешь ссылки с другого пункта меню, то получается что главная дублируется как ссылка и как безанкорная ссылка. Это допустимо?
Ничего не должно дублироваться. Только убирается атрибут href у ссылки текущей страницы.
Спасибо за код и за ссылку в спецификацию HTML-5. Очень пригодилось для беседы с Заказчиком
спасибо, работает
Все хорошо но поле title пустое у ссылки и как добавить свой стиль ?
Спустя 9 лет убрал это с сайта. Спасибо!