Afin d'accroître l'accessibilité de mon thème, je souhaite ajouter l'attribut aria-current="page"
à l'élément de menu qui a la classe .current_page_item
.
À partir de maintenant, je le fais via jQuery en utilisant les éléments suivants:
var currentitem = $( '.current_page_item > a' );
currentitem.attr( 'aria-current', 'page' );
Bien que cela fasse ce que je veux, je préférerais que PHP gère cette chose en particulier.
Je sais que je peux le faire avec une classe Nav Walker personnalisée ou avec un filtre pour nav_menu_link_attributes
. Malheureusement, je n'ai vu aucun code, même à distance, près de ce que je veux faire.
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 );
Toute aide pour écrire ce filtre serait appréciée.
Vous pouvez cibler la classe CSS current_page_item
ou plutôt la classe CSS current-menu-item
. current_page_item
class peut ne pas être présent pour tous les types d’éléments de menu. Lisez la réponse ici pour savoir pourquoi.
Quelle que soit la classe CSS choisie, vous pouvez utiliser le CODE comme suit pour définir l'attribut:
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;
}
Vous pouvez utiliser le filtre nav_menu_link_attributes
pour y parvenir:
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 );
Voir nav_menu_link_attributes pour plus d’informations.