Как вручную указать текущую активную страницу с помощью wp_nav_menu ()

9

Есть ли способ вручную указать, какая страница в данный момент "активна" при использовании wp_nav_menu()?

У меня есть страница «Продукты», и на этой странице у меня есть ссылки на различные (динамические) пользовательские таксономии. Когда я нажимаю на одну из этих таксономий, я остаюсь на странице «Продукты», но wp_nav_menu()теряю ссылку на тот факт, что я все еще на странице «Продукты». Есть ли способ, которым я могу это исправить?

Спасибо!

Джон

Джон
источник

Ответы:

12

Если вы просто хотите добавить current_page_itemкласс к одному пункту меню, вы можете подключиться к nav_menu_css_classфильтру и добавить этот класс, если это необходимо. Он вызывается при печати меню .

Если вы хотите получить доступ ко всему меню и добавить классы, подключите wp_get_nav_menu_itemsфильтр, где вы получите весь $itemsмассив. Вы можете редактировать classesсвойства отдельных элементов.

Ян Фабри
источник
2

@Jon Пока вы используете <body <?php body_class(); ?>>WordPress, вы будете назначать класс current_page_itemвашему меню вместе с тем, используете current_page_parentли вы выпадающие меню.

Chris_O
источник
1
Привет Крис, спасибо за ответ. Я использую <body <? Php body_class (); ? >> но проблема в том, что с точки зрения wp_nav_menu () таксономии, по которым я щелкаю, не имеют к этому отношения! Итак, мне нужно сказать wp_nav_menu () - если страница X, тогда покажите «Продукты» как current_page_parent.
Джон
0

Ян упомянул фильтр nav_menu_css_class, поэтому я посмотрел его, и этот пример был мне полезен Источник: https://codex.wordpress.org/Plugin_API/Filter_Reference/nav_menu_css_class

function my_special_nav_class( $classes, $item ) {
    if ( is_single() && $item->title == 'Blog' ) {
        $classes[] = 'special-class';
    }
    return $classes;
}    
add_filter( 'nav_menu_css_class', 'my_special_nav_class', 10, 2 );
Росс
источник