Jak ręcznie określić bieżącą aktywną stronę za pomocą wp_nav_menu ()

9

Czy istnieje sposób ręcznego określenia, która strona jest aktualnie „aktywna” podczas korzystania wp_nav_menu()?

Mam stronę „Produkty” i na tej stronie mam linki do różnych (dynamicznych) niestandardowych systematyk. Kiedy klikam jedną z tych taksonomii, pozostaję na stronie „Produkty”, ale wp_nav_menu()tracę odniesienie do faktu, że wciąż jestem na stronie „Produkty”. Czy mogę to naprawić?

Dzięki!

Jon

Jon
źródło

Odpowiedzi:

12

Jeśli chcesz tylko dodać current_page_itemklasę do jednego elementu menu, możesz podłączyć się do nav_menu_css_classfiltra i dodać tę klasę w razie potrzeby. Jest wywoływany, gdy menu jest drukowane .

Jeśli chcesz uzyskać dostęp do całego menu i dodać klasy, podłącz się do wp_get_nav_menu_itemsfiltra, w którym otrzymujesz całą $itemstablicę. Możesz edytować classeswłaściwości poszczególnych elementów.

Jan Fabry
źródło
2

@Jon Tak długo, jak korzystasz z <body <?php body_class(); ?>>WordPress, przypisze klasę current_page_itemdo Twojego menu wraz z current_page_parentrozwijanymi menu.

Chris_O
źródło
1
Cześć Chris, dziękuję za odpowiedź. Korzystam z <body <? Php body_class (); ? >> ale problem polega na tym, że jeśli chodzi o wp_nav_menu (), to taksonomie, które klikam, nie są z tym związane! Muszę więc powiedzieć wp_nav_menu () - jeśli strona ma X, pokaż „Produkty” jako bieżący rodzic.
Jon
0

Jan wspomniał o filtrze nav_menu_css_class, więc sprawdziłem go i ten przykład był dla mnie pomocny Źródło: 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 );
Ross
źródło