Cómo añadir estado activo a los enlaces de navegación
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.

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\""; ?>

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

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.

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:

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.

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.
