Entrada de menú activa para taxonomía personalizada - Wordpress

Tengo un tipo de publicación personalizada y una taxonomía personalizada. Cada tipo de publicación personalizada se asigna exactamente a un término. Agregué una entrada de menú para cada término en mi taxonomía personalizada. Detrás de cada una de las entradas del menú hay una página de resumen con todas las publicaciones personalizadas asignadas a este término. Si hace clic en uno de los puestos de aduanas, se abre una página de detalles. Pero si está en una página de detalles, la entrada de menú correspondiente para el término de taxonomía ya no se marca como activa. ¿Qué estoy haciendo mal?

preguntado el 21 de mayo de 12 a las 19:05

Sé que este es un hilo antiguo, pero a) ¿logró encontrar una solución final yb) esa solución posiblemente incluiría el caminante del menú de navegación? -

4 Respuestas

Ok, encontré la siguiente solución para mi problema:

add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 2);

function special_nav_class($classes, $item) {
    global $naventries;
    $naventries[$item->ID] = $item;
    if($item->type == 'taxonomy') {
        global $post;
        $terms = get_the_terms($post->ID, $item->object);

        $currentTerms = array();
        if ( $terms && ! is_wp_error( $terms ) ) {
            foreach($terms as $term) {
                $currentTerms[] = $term->slug;
            }
        }

        if(is_array($currentTerms) && count($currentTerms) > 0) {
            $currentTerm = get_term($item->object_id, $item->object);
            if(in_array($currentTerm->slug, $currentTerms)) {
                $classes[] = 'current-menu-item';
            }
        }
    } 

     return $classes;
}

Pero todavía queda un problema. yo tambien quiero agregar la clase actual-menú-ancestro al elemento padre. Tengo la identificación del elemento principal a través de $item->menu_item_parent pero no tengo idea de cómo puedo usar esta identificación para cambiar las clases de la entrada de menú correspondiente en este punto.

respondido 24 mar '14, 23:03

En algunos casos no hay plazo. Debe evitar recorrer una matriz vacía. poner condicional if( $terms && !is_wp_error($terms) ) antes foreach círculo - Gregmatys

¿Alguna vez averiguó cómo agregar el actual-menú-ancestro ¿clase? - Rocaboca

<script type="text/javascript">
    // Active state if you have a pagetitle on the result page
    var currentTitle = $('.header h2').html();
    $('.nav ul.menu li').find(':contains('+currentTitle+')').parent().addClass('current-menu-item');
</script>

Entonces, mi solución funciona si tiene un título de página con el mismo nombre que el elemento del menú al que le gustaría agregar la clase current-page-item a.

Por supuesto, necesita jQuery instalado para que esto funcione.

editar: asegúrese de poner esto debajo del bucle en su página de taxonomía de archivo.

Respondido el 28 de Septiembre de 12 a las 12:09

Puedes hacerlo a través de jquery:

<script type="text/javascript">
    $(document).ready(function(){
        var title = $(document).attr('title');

        $(".maincat-list li a:contains('"+title+"')").css("text-decoration", "underline");

    });
</script>

Respondido el 26 de junio de 13 a las 10:06

He estado luchando con esto durante algún tiempo. Así resolví mi problema.

  1. Vaya al backend de wordpress -> apariencia -> menú
  2. Agregue alguna clase personalizada al elemento del menú que desea activar en su taxonomía o página de archivo (si no ve la opción de clase css, vaya a las opciones de pantalla y actívela). Por ejemplo, puse la clase 'activa' en el elemento del menú.
  3. Vaya a archive.php o taxonomy.php o cualquier plantilla que esté usando y agregue algo de estilo para la clase .active que acaba de agregar, como:
<style>
.menu li.active {
background-color:#000;
}
</style>

Por supuesto, puede usar otros métodos para inyectar el css en la página de archivo.

Respondido el 15 de diciembre de 16 a las 17:12

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.