Por Javier García, hace 10 meses y 10 días

Funciones de WordPress accesibles en todo el blog

WordpressSi tu blog corre sobre WordPress puede que quieras realizar algunos cambios en la estructura y el contenido devuelto (o puede que incluso estés desarrollando tu propio tema) y te encuentres con una limitación: algunas funciones no están accesibles fuera de «el Bucle» («the Loop»).

El Bucle es el código que muestra las entradas de cada página, y es en lo que se basa la parte pública de WordPress. Este CMS de blogs está tan centrado en las entradas devueltas que muchas funciones, si se encuentran fuera del Bucle, no devuelven lo que cabría esperar o simplemente no devuelven nada. Este hecho estaba muy agravado en WordPress 1.X, donde la inmensa mayoría de las funciones no estaban permitidas fuera del Bucle. Pero aún en las nuevas versiones de este software encontramos algunas funciones que no se comportan adecuadamente. Es el caso de, por ejemplo, las funciones relacionadas con el autor de la entrada; por lo tanto, hacer algo en principio tan común como incluir la información del autor en la barra lateral (al estilo Blogger) no es posible, al menos de forma directa.

El tener accesibles todas las funciones y toda la información de las entradas es interesante para poder controlar mejor el contenido de los bloques «estáticos» de cada página: encabezado (header), barra lateral (sidebar) y pie de página (footer). Especialmente relevante es el caso del encabezado, ya que cualquiera que se preocupe por el rendimiento de su blog en los buscadores no estará contento con la forma en que WordPress genera el título y las etiquetas meta de las páginas. Sí, has leído bien, «etiquetas meta». Si aún crees que estas etiquetas siguen defenestradas, echa un vistazo a cómo se comporta Google últimamente.

La solución

Para hacer todas las funciones accesibles desde cualquier parte de las páginas devueltas por Wordpress recurriremos al sencillo método de incluir todo el contenido dentro del Bucle. Si hay funciones que no tienen el comportamiento esperado fuera del Bucle, evitar que haya ningún código fuera de ese bloque es la solución obvia. Por supuesto el código del Bucle se repite por cada entrada devuelta y no queremos repetir por ejemplo el encabezado, sino hacer que se devuelva sólo al principio de la página (y que el pie de página, y normalmente la barra lateral, aparezca sólo al final). Para lograr esto haremos uso de las variables $wp_query->current_post y $wp_query->post_count que almacenan respectivamente el número de entrada actual (empezando por 0) y el número total de entradas devueltas.

Si el código de, por ejemplo, el index.php de un tema corriente suele tener esta estructura:

  1. <?php
  2. get_header();
  3. if ( have_posts() ){
  4.    while ( have_posts() ){
  5.       the_post();
  6.       ...
  7.    };
  8. }else{
  9.    ...
  10. };
  11. get_sidebar();
  12. get_footer();
  13. ?>

Para llevar a cabo el método descrito, necesitaremos alterar ese código de la siguiente manera:

  1. <?php
  2. if ( have_posts() && ! is_404() ){
  3.    while ( have_posts() ){
  4.       the_post();
  5.       if ( $wp_query->current_post == 0 ) get_header();
  6.       ...
  7.       if ( $wp_query->current_post == $wp_query->post_count - 1 ){
  8.          get_sidebar();
  9.          get_footer();
  10.       };
  11.    };
  12. }else{
  13.    get_header();
  14.    ...
  15.    get_sidebar();
  16.    get_footer();
  17. };

Necesitarás modificar de esta forma los archivos que devuelvan entradas en el tema que estés usando. Éstos normalmente son: index.php, archive.php, attachment.php, page.php, search.php y single.php, aunque cada tema es diferente, así que busca la función have_posts() en su código para encontrar dónde será necesario aplicar los cambios.

No hay comentarios

Sé el primero en escribir un comentario a esta entrada.

Escribir un comentario

Si quieres añadir tu comentario a esta entrada, simplemente rellena el siguiente formulario:





* Campos requeridos

Puedes usar estas etiquetas XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>.

1 trackback

Para notificar de una mención en tu blog a esta entrada, habilita la notificación automática (Opciones > Discusión en WordPress) o especifica esta url de trackback: http://​1blogdeblogs.com/​2007/​09/​funciones-de-wordpress-accesibles-en-todo-el-blog.html/​trackback