Cómo especificar manualmente la página activa actual con wp_nav_menu ()

9

¿Hay alguna forma de especificar manualmente qué página está actualmente "activa" cuando se usa wp_nav_menu()?

Tengo una página de "Productos", y en esa página tengo enlaces a varias taxonomías personalizadas (dinámicas). Cuando hago clic en una de estas taxonomías, me quedo en la página "Productos" pero wp_nav_menu()pierdo la referencia al hecho de que todavía estoy en la página "Productos". ¿Hay alguna manera de arreglar esto?

¡Gracias!

Jon

Jon
fuente

Respuestas:

12

Si solo desea agregar la current_page_itemclase a un elemento del menú, puede conectarse al nav_menu_css_classfiltro y agregar esa clase si es necesario. Se llama cuando se imprime el menú .

Si desea acceder a todo el menú y agregar clases, conéctese al wp_get_nav_menu_itemsfiltro, donde obtendrá toda la $itemsmatriz. Puede editar las classespropiedades de elementos individuales.

Jan Fabry
fuente
2

@ Jon Mientras esté usando <body <?php body_class(); ?>>WordPress asignará la clase current_page_itema su menú junto con current_page_parentsi está usando menús desplegables.

Chris_O
fuente
1
Hola Chris, gracias por la respuesta. Estoy usando <body <? Php body_class (); ? >>, pero el problema es que, en lo que respecta a wp_nav_menu (), las taxonomías en las que hago clic no están relacionadas. Entonces, necesito decirle a wp_nav_menu () - si la página es X, entonces muestre "Productos" como el current_page_parent.
Jon
0

Jan mencionó el filtro nav_menu_css_class, así que lo busqué y este ejemplo me fue útil Fuente: 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
fuente