Cómo añadir estado activo a los enlaces de navegación

13 ene 2015, 19:45:11
Vistas: 14.4K
Votos: 0

Estoy intentando añadir estados activos para mi menú de navegación personalizado, pero hasta ahora nada de lo que pruebo funciona. He configurado el menú de navegación en un archivo separado nav.php, luego incluí nav.php en mi archivo header.php así:

<?php include('nav.php'); ?>

Creé páginas personalizadas de WordPress en la carpeta child e incluí header.php justo después del nombre de la plantilla:

<?php /* Plantilla: Página de Diseño Web*/
 ?>

<?php get_header(); ?>

Aquí está mi código HTML y PHP actual en nav.php donde añadí un atributo id único "currentpage" para indicar qué elemento del menú refleja la página actual del usuario:

<ul id="menu" class="clearfix">                
                <li<?php if ($thisPage=="About") 
echo " id=\"currentpage\""; ?> class="parent-item"><a href="/about" title="Página de bienvenida" class="parent-link menu-item-2" id="main-menu-item-4">About</a></li>                               

                <li<?php if ($thisPage=="Portfolio") 
echo " id=\"currentpage\""; ?> class="parent-item"><a href="/portfolio" class="parent-link menu-item-3">Portfolio</a></li>               

                <li<?php if ($thisPage=="Services") 
echo " id=\"currentpage\""; ?> class="parent-item"><a href="/services" class="parent-link menu-item-4">Services</a></li> 

                <li<?php if ($thisPage=="Prices") 
echo " id=\"currentpage\""; ?> class="parent-item"><a href="/prices" class="parent-link menu-item-5">Prices</a></li>                

</ul>                                                        

Y este es mi CSS para los estados hover y active:

ul#menu li a:hover {
background-color: #999999;
color: #fff; 
}

ul#menu li #currentpage a {
background: #fff;
color: #333;
}

Para cada página asigné el valor después del nombre de la plantilla, aquí está mi página de inicio:

<?php /* Plantilla: Página de Diseño Web
*/
 ?>
<?php $thisPage="Home"; ?>

<?php get_header(); ?>

Espero que alguien pueda ayudar, realmente no entiendo por qué este código u otro código PHP que pruebo no logro hacer funcionar estos menús personalizados.

4
Comentarios

Falta mucho código, está muy incompleto, wow - por favor edita la pregunta para que podamos ayudar. Saludos.

skim- skim-
13 ene 2015 19:48:42

Solo como consejo, cuando agregues código en el editor, resalta tu código y haz clic en el signo {} que está justo encima del editor. Esto agregará tu código en un bloque de código :-)

Pieter Goosen Pieter Goosen
13 ene 2015 20:03:15

Necesitas hacer que $thisPage sea global si vas a referenciarla en otros archivos, mira el alcance de variables en php. Generalmente querrás evitar hacer cualquier otra cosa global si puedes evitarlo. Probablemente sea mejor usar las herramientas integradas de WordPress para los menús como sugiere la respuesta de @Dan.

Andrew Bartel Andrew Bartel
13 ene 2015 20:23:57

Muchas gracias. Realmente aprecio tu esfuerzo y el enlace de referencia que enviaste para la documentación. Sí, de hecho, creo que es mejor utilizar las herramientas integradas de WordPress y enlazar con mis estilos para lograr los efectos deseados.

Steven Donea Steven Donea
15 ene 2015 22:32:21
Todas las respuestas a la pregunta 4
4

Si tu tema está utilizando wp_nav_menu(), tendrás la clase current-menu-item añadida automáticamente al elemento <li> correspondiente. ¿Te sirve esta información?

13 ene 2015 19:51:06
Comentarios

Hola Dan, es un menú personalizado con el id #menu, pero ahora lo cambié a wp_nav_menu y también hice cambios en el css. ¿Debería eliminar también este código php de todos los li con viñetas: <?php if ($thisPage=="About") echo " id=\"currentpage\""; ?>

Steven Donea Steven Donea
13 ene 2015 20:23:23

¿Por qué no usas simplemente la función wp_nav_menu() en lugar de crear manualmente tu menú?

Dan Dan
14 ene 2015 14:39:08

Hola Dan, tienes razón sobre usar la función wp_nav_menu(), en lugar de tomar la molestia de crear uno manualmente. Así que volví a añadir la navegación de WordPress y tengo esto: <div id="access" role="navigation"> <?php wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'primary' ) ); ?> </div> ahora el único problema es cuando empiezo a dar estilo a los menús, primero que nada no puedo hacer que los menús floten a la derecha.

Steven Donea Steven Donea
15 ene 2015 02:19:52

Probablemente necesitarás cambiar tus selectores CSS para que funcionen con el HTML que WordPress genera para ti. Normalmente el elemento <ul> tiene una clase "menu", no un id como en tu ejemplo de código.

Dan Dan
15 ene 2015 11:38:44
0

Lo que haría es eliminar todo ese código que tienes en nav.php mostrando el menú, crear el menú en el backend de WordPress, luego podrás usar .current-menu-item en tu css.

Entonces todo lo que necesitas para llamar al menú será wp_nav_menu();

Aquí está la documentación para esa función:

http://codex.wordpress.org/Function_Reference/wp_nav_menu

14 ene 2015 06:52:28
0

En tu archivo PHP, establece $thisPage antes de incluir include('nav.php');. Entonces, la variable $thisPage será pasada a nav.php y procesada en su sentencia if.

Sin embargo, esto es una muy mala práctica, y una mejor manera de hacerlo sería creando tu menú en WordPress mismo y enganchándolo a tu plantilla. WordPress documenta cómo hacer esto correctamente.

15 ene 2015 08:13:49
0

He eliminado el archivo nav.php de mi header.php, y volví a agregar el antiguo código del menú que viene con WordPress. Hice algunos ajustes en mi archivo style.css para adaptar los estilos al diseño deseado y solo utilicé el #menu-navmenu que creé en WordPress para alinear a la derecha mi barra de menú.

ul#menu-navmenu{float: right;}

Así que antes tenía este ul#menu {float: right; margin: 15px;}

y ahora agregué un margen de 15px a este código en la plantilla style.css de WordPress:

#access .menu-header ul,
div.menu ul {
    list-style: none;
    /*margin: 0;*/margin: 15px;
}

Todo funciona como se esperaba y gracias por toda su ayuda en este asunto, esta es una gran comunidad de WordPress.

16 ene 2015 03:12:45