Задача. Необходимо из меню убрать ссылку активного пункта, т.к. если мы находимся на странице из меню, то выходит что страница ссылается сама на себя. Т.е. нет необходимости выводить этот пункт, как ссылку.
Решение 1. Используем хук-фильтр wp_nav_menu
Код №1 в functions.php
.
Стоит учесть, что мы заменяем тег
a
на span
, поэтому в стилях нужно посмотреть как выделяется ссылка активного пункта меню и добавить правило с поправкой на span
.
1 2 3 4 5 6 7 8 9 |
## Удалить ссылку с активного пункта меню /* Т.к. меняем a на span, нужно в CSS это учесть */ function wpcraft_no_link_current_page($menu) { return preg_replace('%((current_page_item|current-menu-item)[^<]+)[^>]+>([^<]+)</a>%', '$1<span>$3</span>', $menu); } add_filter('wp_nav_menu', 'wpcraft_no_link_current_page'); |
Решение 2. Можно удалить атрибут href
у тега a
Кодом №2:
1 2 3 4 5 6 7 8 |
## Удалить href из ссылки с активного пункта меню function wpcraft_wp_nav_menu_delete_href_current_link( $atts, $item, $args, $depth ) { if ( $item->current ) $atts['href'] = ''; return $atts; } add_action( 'nav_menu_link_attributes', 'wpcraft_wp_nav_menu_delete_href_current_link', 10, 4 ); |
Если требуется заменить активный пункт меню, только для конкретного меню — используем Код №3:
1 2 3 4 5 6 7 8 9 10 11 |
## Убрать href активного пункта конкретного меню /* ('menu_name' - идентификатор меню, указывается в register_nav_menu() и wp_nav_menu()) */ function wpcraft_wp_nav_menu_delete_href_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', 'wpcraft_wp_nav_menu_delete_href_current_link', 10, 4 ); |
Все же, для SEO рекомендуется заменить тег ссылки (Код №1), т.к. второй вариант остается ссылкой.