Contenido de la sección Astracán

[Día Serio] Crear un menú horizontal en WordPress utilizando sólo CSS

Te recordamos que hoy nos ha dado por ahí y éste es el día serio de flapa

El código utilizado, en el siguiente artículo sólo es válido para WordPress 2.7.0 o superior, salvo el CSS

Hasta el momento los desarrolladores en WordPress teníamos ligeros problemas para mostrar el menú de navegación de nuestros blogs. Con la llegada de WordPress 2.7 (y superiores) también llegaron varias funciones que nos facilitaban la vida, en la medida de lo posible. Una de ellas es wp_page_menu.

¿Para qué sirve wp_page_menu?

Básicamente muestra un listado de páginas a modo de enlaces y además, y he aquí lo novedoso, nos da la oportunidad de incluir una opción de “Inicio” para acceder a la portada de nuestra página, algo que hasta ahora teníamos que realizarlo casi manualmente, en mi caso utilizando una función en function.php.

¿Cómo la utilizo?

La sintaxis es la siguiente:

<?php wp_page_menu( $args ); ?>

Los parámetros los podéis encontrar en el Codex de WordPress, donde además os ponen algunos ejemplos para que os vayáis familiarizando con esta reciente función.

¿Y tanto bombo para tanto?

No seas impaciente, que ya que estamos picando código, vamos a enseñarte cómo maquetar un menú horizontal de dos niveles de profundidad utilizando únicamente CSS, algo sencillo y para newbies (que nos vamos a poner serios en flapa, pero no tanto joder).

Lo primero es generar nuestro menú. Antes realmente habría que crear una estructura de páginas, de dos niveles de profundidad como máximo. En nuestro ejemplo las páginas serán: Portada, Seccion1 (subpagina1,subpagina2), Seccion3 (subpagina3,subpagina4).

Para generar el menú utilizaremos la función wp_page_menu que os mostramos antes. En nuestro caso, ordenaremos mediante el orden impuesto a la página. Además, pondremos el nombre “Portada” al enlace que lleve a la home de nuestro blog y le daremos la clase “horizontal-menu” a la estructura HTML generada:

<?php wp_page_menu( array( 'show_home' => 'Portada', 'sort_column' => 'menu_order', 'menu_class' => 'horizontal-menu' ) ); ?>

Esto generaría un menú parecido al siguiente:

<div class="horizontal-menu">
  <ul>
    <li class="current_page_item">
      <a href="http://urldetublog">Portada</a>
    </li>
    <li class="page_item page_item_1">
      <a href="http://urldetublog/seccion1">Seccion1</a>
      <ul>
        <li class="page_item page_item_2">
          <a href="http://urldetublog/seccion1/subpagina1">subpagina1</a>
        </li>
        <li class="page_item page_item_3">
          <a href="http://urldetublog/seccion2/subpagina2">subpagina2</a>
        </li>
      </ul>
    <li class="page_item page_item_4">
      <a href="http://urldetublog/seccion1">Seccion1</a>
      <ul>
        <li class="page_item page_item_5">
          <a href="http://urldetublog/seccion1/subpagina1">subpagina1</a>
        </li>
        <li class="page_item page_item_6">
          <a href="http://urldetublog/seccion2/subpagina2">subpagina2</a>
        </li>
      </ul>
    </li>
  </ul>
</div>
Las clases del tipo page_item_#, el número que aparece es el ID de la página en cuestión y se genera de forma automática al crear la página. Los que hemos puesto son un ejemplo, no necesariamente deben ser los mismos que los tuyos.

Toma ya. ¿Ya hora qué?

Pues vamos a maquetar. Y aquí viene la bola extra y el por qué mola tanto wp_page_menu. Nos crea clases muy útiles en cada elemento li y que nos ayudan a maquetar. Por ejemplo, cada vez que hago click sobre un enlace, al li que lo contiene le pone la clase current_page_item. Si se trataba de una subpágina, al li de la página padre le aplica las clases current_page_antecesor y current_page_parent.

Ahora viene la magia:


.horizontal-menu ul li{
  display: inline;
  float: left;
  margin-left: 5px; /* cambiar este margen para aumentar la separación entre las opciones de 1er nivel */
  width: 200px; /* os recomiendo poner un ancho fijo, el motivo lo explico después */
}

/* para controlar el estilo de los enlaces de primer nivel */
.horizontal-menu ul li a{
  display:block;
  padding:10px 13px;
  text-decoration:none;
  cursor:pointer;
}

/* para controlar los li de segundo nivel */
.horizontal-menu li ul li{
  margin: 0;
  float: none;
  display: block;
  background-color: #CCC;
}

/* para controlar el estilo de los enlaces de segundo nivel */
.horizontal-menu li ul a{
  padding: 5px 10px 5px 10px;
}

.horizontal-menu li ul{
  display: none;
  position: absolute;
}

.horizontal-menu li:hover ul{
  display: block;
}

/* para controlar el color de las opciones sobre las que paso el ratón */
.horizontal-menu li:hover{
  background-color: #AAA;
}

/* para controlar el color de los li seleccionados, sobre los que paso el ratón,
los li padres y los li padres sobre los que paso el ratón */
.horizontal-menu .current_page_item,
.horizontal-menu .current_page_item:hover,
.horizontal-menu .current_page_parent,
.horizontal-menu .current_page_parent:hover{
  background-color: #FFBD25;
}

/* para controlar el color de los li de segundo nivel seleccionados */
.horizontal-menu .current_page_parent .current_page_item{
  background-color: #CCC;
}                    

/* para controlar el color de los li de segundo nivel seleccionados
sobre los que paso el ratón */
.horizontal-menu .current_page_parent .current_page_item:hover{
  background-color: #AAA;
}
Con este CSS podemos controlar todo el comportamiento de nuestro menú horizontal. Donde digo colores, podéis cambiarlos por imágenes y demás virguerías, para ponerlo bonito dentro de la medida de lo posible. Por cierto, no lo he testeado en Internet Explorer (ni ganas).

Pues hasta aquí todo por hoy y para siempre jamás. ¿A que mola? Pues ahora viene lo divertido: La verdad es que no mola nada. Es decir, para blogs con poca profundidad en su arquitectura de información esta opción no es para nada recomendable. ¿Por qué? Porque ocultar información no es una buena práctica desde el punto de vista de la experiencia de usuario. Obligamos a que el usuario tenga que situar el ratón sobre un elemento en cuestión para descubrir qué se oculta detrás, y se convierte en algo bastante tedioso.

Dejando que esto sea un blog de… a sí, humor, que ya se me había olvidado… pues espero que algunos os resulte útil. O no.

Yo soy tu padre

Darth Vader - No, yo soy tu padre

Manifestación en Madrid contra el anteproyecto de ley del aborto

manifestacion-contra-el-aborto-madrid

….que le pregunten a la mayoría por una vez, a ver qué piensan de su lema Cada vida importa. Con el que por cierto, yo estoy de acuerdo, pero no a cualquier precio.

La peor persona del mundo

No, la peor persona del mundo ni es Bush, ni es Bin Laden, ni la vieja repintada en el autobús a la que “cedes amablemete” el asiento “porque le duelen las piernas” (po pedazo de hija de una hiena, ¡no lleves esos taconazos, que es pa matarte!).

La peor persona del mundo es aquel que te llama por teléfono y su conversación no termina nunca. Y desgraciadamente, todos tenemos a alguien así en nuestras tristes y blogueras vidas.

Estudios científicos de reciente publicación han revelado cuando coges el teléfono a esa persona entras en un bucle espacio temporal del cual sólo es posible salir ahorcándote con el cable telefónico o arrancándote la mano a mordiscos. Si Sheldon tuviera algo de vida social, seguro que tendría un “amigo” así y por fin conseguiría la pieza que le falta para demostrar su teoría de cuerdas heteróticas. Lamentablemente, no sobreviviría para contarla y recibir su ansiado Premio Nobel. Pobre Sheldon.

Escapar del “eterno hablante”, tal y como se le conoce en las viejas leyendas indias, es imposible. Tu única posibilidad es encontrarle a plena luz del día, clavarle una estaca en el corazón, arrancarle la cabeza y quemarla, rociar su cuerpo con agua bendita y enterrar su cadáver tras varios metros de cemento armado.

Aunque una opción menos violenta y no punible quizás sea abrirle un perfil en Facebook con tu única mano sana (si te ahorcaste antes con el cable telefónico está complicado) para que se lleve la mayoría del tiempo borrando e-mails estúpidos e ignorando peticiones de amistad de gente que no conoce. Con suerte incluso puede que acepte alguna y te deje en paz.

Yo estuve preso en la cárcel temporal de alguien así. Pero conseguí escapar. Hice que mi abuela cogiera el teléfono y aunque ahora gasto medio sueldo en pañales y comida intravenosa, soy una persona casi normal.

Compañero, tú también puedes. Si necesitas ayuda, déjanos un comentario. Notificaremos a las autoridades competentes para que hagan todo lo posible por ti. Pero mientras tanto, no lo olvides. ¡No estás solo, amigo! ¡No estás solo!

PD: Si esa persona es tu pareja, lo siento pero estás jodid@ de por vida. Que te sea leve. Mi único consejo es que le compres un móvil ya que al menos así, mientras te llama y no para de contarte las mil y un cosas intrascendenales que le han pasado al cabo del día, separadas de silencios interminables, podrás tener sexo con ella. Menos da una piedra joder, no te quejes.

Darth Vader: Yo soy tu padre

Darth Vader habla con Luke Perry