Добавить пользовательский атрибут в ссылку на пункт меню с помощью фильтра
Чтобы повысить доступность моей темы, я хочу добавить атрибут aria-current="page"
в пункт меню, в котором есть класс .current_page_item
.
На данный момент я делаю это с помощью jQuery, используя следующее:
var currentitem = $( '.current_page_item > a' );
currentitem.attr( 'aria-current', 'page' );
Хотя это делает то, что я хочу, я бы предпочел, чтобы PHP обрабатывал эту конкретную вещь.
Я знаю, что могу сделать это либо с помощью пользовательского класса навигатора, либо с помощью фильтра nav_menu_link_attributes
. К сожалению, я не видел никакого кода даже отдаленно близко что я хочу сделать.
function my_menu_filter( $atts, $item, $args, $depth ) {
// Select the li.current_page_item element
// Add `aria-current="page"` to child a element
}
add_filet( 'nav_menu_link_attributes', 'my_menu_filter', 10, 3 );
Буду признателен за любую помощь в написании этого фильтра.
2 answers
Вы можете выбрать класс CSS current_page_item
или вместо этого выбрать класс CSS current-menu-item
. current_page_item
класс может отсутствовать для всех видов пунктов меню. Прочитайте ответ здесь, чтобы узнать, почему.
Какой бы класс CSS вы ни выбрали, вы можете использовать следующий КОД для установки атрибута:
add_filter( 'nav_menu_link_attributes', 'wpse260933_menu_atts_filter', 10, 3 );
function wpse260933_menu_atts_filter( $atts, $item, $args ) {
if( in_array( 'current-menu-item', $item->classes ) ) {
$atts['aria-current'] = 'page';
}
return $atts;
}
Вы можете использовать фильтр nav_menu_link_attributes
для достижения этого:
function add_attribute_to_current_menu_item( $atts, $item, $args ) {
// check if this item represents the current post
if ( $item->object_id == get_the_ID() )
{
// add the desired attributes:
$atts['aria-current'] = 'page';
}
return $atts;
}
add_filter( 'nav_menu_link_attributes', 'add_attribute_to_current_menu_item', 10, 3 );
Смотрите атрибуты nav_menu_link_attributes для получения дополнительной информации.