Cuando se encuentra en / (o “inicio”) mi menú no recibe una clase de elemento de menú actual

2

Soy un wordpress noob retocando un tema, así que estoy tratando de entender cómo funciona. He leído sobre 10 publicaciones relacionadas en SE, pero no lo entiendo todavía. Mi problema es el siguiente:

header.php parece generar el menú con,

<?php wp_nav_menu(array('theme_location' => 'nav-menu','container'  => 'div', 'container_class' => 'menu' )); ?> 

En el wp-admin, he creado un menú con

"Blog | Acerca de | Contacto"

que apuntan a la raíz y dos páginas: "/" | "sobre" | "contacto" (muy estándar). Ahora, me gustaría diseñar el menú según la página " activa ". Para " about " y " contact " esto parece muy fácil. Las clases generadas para cada elemento del menú incluyen elemento del menú actual . Sin embargo, cuando en la página de inicio, mi menú "blog" "li" solo recibe las clases

menu-item menu-item-type-custom menu-item-object-custom menu-item-47

y, por lo tanto, no se puede diseñar en consecuencia. He leído algunas cosas sobre el filtrado, el uso de funciones, etc ... pero no lo entiendo bien. Si defino una función en functions.php, ¿dónde la usaría después?

Cualquier información y ayuda es muy apreciada,

    
pregunta Massagran 20.01.2012 - 11:38

4 respuestas

5

Para que esto funcione, debes ir al administrador de menú y en la sección de páginas, haz clic en la pestaña que dice 'ver todo' . En la parte superior de la lista hay una opción especial para su página de inicio, ya sea la vista normal del blog o una página específica. Agregue eso al menú y estará bien.

    
respondido por el sanchothefat 20.01.2012 - 15:54
0

El menú se puede generar fácilmente usando este código,

<ul>
                <li <?php if(is_home()) { ?> class="active" <?php } ?>><a href="<?php echo get_option('home'); ?>/">Home</a></li>
                <?php wp_list_pages('depth=1&sort_column=menu_order&title_li=' ); ?>
            </ul>

La función utilizada para crear una lista de páginas publicadas, wp_list_pages (), agrega automáticamente una clase current_page_item al elemento de la lista correspondiente a la página que estás viendo.

Solo tiene que agregar la clase .current_page_item a su archivo style.css:

/* Style the list element */
li.current_page_item{
background:#eee;
color:#777;
}

/* Style the link element */
li.current_page_item a{
text-decoration:underline;
}
    
respondido por el Sufiyan Ghori 20.01.2012 - 12:09
0

No es muy bonito (y podría mejorarse seleccionando dinámicamente el ID del elemento del menú con php), pero puede hacer esto:

     <?php if (is_front_page()) echo
       '<style type="text/css" title="text/css">.menu-item-14 a
         {your current_page_item style here}</style>'
    ;?>

Cambie el .menu_item-14 a la clase de la página de inicio actual y también cambie el current_menu_item a su CSS.

Coloca esa declaración justo después de

<link rel="stylesheet" type="text/css" media="all" href="<?php bloginfo( 'stylesheet_url' ); ?>" />

en header.php para que el CSS se cargue después de la hoja de estilo principal.

    
respondido por el markratledge 20.01.2012 - 15:24
0

Es extraño que wordpress no recoja esa página como la página actual. Pero una solución fácil es esta (solo CSS).

En tu estilo.css

.home .menu-item-47 {
   /* current-menu-item styles */
}
    
respondido por el Rob Vermeer 20.01.2012 - 15:40

Lea otras preguntas en las etiquetas