Como especificar manualmente a página ativa atual com wp_nav_menu ()

9

Existe uma maneira de especificar manualmente qual página está atualmente "ativa" ao usar wp_nav_menu()?

Eu tenho uma página "Produtos" e nessa página tenho links para várias taxonomias personalizadas (dinâmicas). Quando clico em uma dessas taxonomias, permaneço na página "Produtos", mas wp_nav_menu()perco a referência ao fato de ainda estar na página "Produtos". Existe uma maneira de corrigir isso?

Obrigado!

Jon

Jon
fonte

Respostas:

12

Se você quiser apenas adicionar a current_page_itemclasse a um item de menu, poderá conectar-se ao nav_menu_css_classfiltro e adicionar essa classe, se necessário. É chamado quando o menu é impresso .

Se você deseja acessar o menu inteiro e adicionar classes, conecte-se ao wp_get_nav_menu_itemsfiltro, onde você obtém toda a $itemsmatriz. Você pode editar as classespropriedades de itens individuais.

Jan Fabry
fonte
2

@ Jon Desde que você esteja usando o <body <?php body_class(); ?>>WordPress, a classe será atribuída current_page_itemao seu menu junto com current_page_parentse você estiver usando os menus suspensos.

Chris_O
fonte
11
Oi Chris, Obrigado pela resposta. Eu estou usando o <body <? Php body_class (); ? >> mas o problema é que, no que diz respeito ao wp_nav_menu (), as taxonomias nas quais estou clicando não têm relação com isso! Então, eu preciso dizer para wp_nav_menu () - se a página for X, então mostre "Products" como o current_page_parent.
Jon
0

Jan mencionou o filtro nav_menu_css_class, então procurei e este exemplo foi útil para mim Fonte: 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
fonte