Добавление пользовательских классов к ссылкам в wp_nav_menu
Я хочу добавить пользовательский класс к ссылкам в выводе wp_nav_menu
.
По умолчанию выглядит так:
<li id="menu-item" class="menu-item menu-item-type-custom">
<a href="http://example.com">пример</a>
</li>
Я хочу получить такой результат:
<li id="menu-item" class="menu-item menu-item-type-custom ">
<a href="http://example.com" class="class">пример</a>
</li>

Это можно сделать с помощью фильтра nav_menu_link_attributes
.
add_filter( 'nav_menu_link_attributes', 'wpse156165_menu_add_class', 10, 3 );
function wpse156165_menu_add_class( $atts, $item, $args ) {
$class = 'class'; // или что-то на основе $item
$atts['class'] = $class;
return $atts;
}

Как я могу добавить несколько различных atts
внутри якоря? Например, не только добавление классов, но и добавление aria-expanded="false"
?

У меня есть лучшее решение https://stackoverflow.com/a/67859550/9207553

У меня есть решение для добавления класса к тегу <a>.
1 шаг: добавьте это в functions.php
function add_additional_class_on_a($classes, $item, $args)
{
if (isset($args->add_a_class)) {
$classes['class'] = $args->add_a_class;
}
return $classes;
}
add_filter('nav_menu_link_attributes', 'add_additional_class_on_a', 1, 3);
2 шаг: затем используйте это в вашей теме следующим образом
<?php
// Вывод меню здесь
wp_nav_menu(array(
'theme_location' => 'my-footer-menu',
'menu_class' => 'footer-top list-unstyled',
'add_a_class' => 'box-link text-dark',
));
?>

Вы можете добавлять классы нативно через интерфейс в админке. Откройте Screen Options
(вверху справа на экране) и отметьте галочкой CSS Classes
. Не помню, применяется ли класс к самой ссылке, но вы всегда можете обратиться к ссылке внутри контейнера с помощью CSS (.class a
).

add_filter( 'nav_menu_link_attributes', 'wpse156165_menu_add_class', 10, 3 );
function wpse156165_menu_add_class( $classes, $item, $args ) {
if(isset($args->add_link_class)) {
$classes['class'] = $args->add_link_class;
}
return $classes;
}
Теперь вы можете использовать add_link_class
как массив в меню.
