Добавить пользовательский атрибут в ссылку на пункт меню с помощью фильтра


Чтобы повысить доступность моей темы, я хочу добавить атрибут 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 );

Буду признателен за любую помощь в написании этого фильтра.

Author: Fayaz, 2017-03-22

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;
}
 4
Author: Fayaz, 2017-04-13 12:37:38

Вы можете использовать фильтр 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 для получения дополнительной информации.

 0
Author: Yoav Kadosh, 2017-03-22 04:28:56