Trabajando dentro del ‘loop’ de WordPress

En este artículo vamos a ver los diversos datos adicionales que podemos aportar de los diferentes posts que forman nuestro sitio, e introduciremos un nuevo archivo de plantilla para nuestro tema, single.php.

En nuestro simple tema inicial teníamos el siguiente archivo index.php:

En este archivo encontramos las siguientes sentencias dentro del ‘loop’:

Básicamente, aquí lo que hacemos es definir un título de segundo nivel con las etiquetas HTML <h2>…</h2> (el de primer nivel <h1> es la cabecera de la página), que enlaza con el post mediante <a>…</a>, y finalmente, el texto del post. Para ello empleamos tres funciones de WordPress, sobre las que el Códex nos dice lo siguiente:

  • the_permalink() muestra la URL del enlace (permalink) al post actualmente procesado en el ‘loop’. Esta etiqueta debe estar dentro del ‘loop’, y generalmente se emplea para mostrar el enlace permanente a cada post, cuando estos están siendo mostrados. No se puede emplear para mostrar un permalink a un post arbitrario en tu web. Para eso, hay que emplear get_permalink().
  • the_title() muestra el título del post actual. Esta etiqueta debe ser empleada dentro del ‘loop’. Para obtener el título de un post fuera del ‘loop’ se debe emplear la función get_the_title(). La función the_title() puede tener la forma the_title( $antes, $despues, $salida ), donde los parámetros son: $antes, cadena que se mostrará antes del título, por defecto vacía; $despues, cadena que se mostrará después del título, por defecto vacía; y $salida, booleano que, en caso de verdadero muestra el título y en caso falso devuelve el título sin mostrarlo para emplearlo en PHP, y que por defecto es verdadero.
  • the_content() muestra el contenido de un post. Puede tener la forma the_content ($more_link_text, $strip_teaser), donde los parámetros son: $more_link_text, cadena opcional para cuando se ha introducido una etiqueta “Leer más” en el interior de un post, y que está vacía por defecto; y $strip_teaser, opcional, para mostrar el contenido antes de la etiqueta “Leer más”, que por defecto es falso.

Tal como está ahora, si hay muchos artículos publicados en el blog, nos encontraremos con una página excesivamente larga. Lo más adecuado sería acortar los posts dejando ver sólo un resumen inicial. Para ello, sustituiremos the_content() por the_excerpt() (extracto o fragmento, en inglés).

  • the_excerpt() muestra el inicio del texto del post, recortándolo a 55 palabras, acabando con ‘[…]’, siempre que el post no contenga la etiqueta “Leer más”.

De esta forma, tenemos una página en la que nos saldrán todos los artículos que publiquemos, pero sólo con un fragmento inicial del texto, y si un artículo nos interesa, hacemos clic sobre su título y veremos el artículo completo en otra página. Para ello, vamos a introducir un nuevo archivo de plantilla en nuestro tema: single.php.

A simple vista, destaca su gran similitud con el archivo index.php, pero también que es más sencillo. Explico las diferencias y similitudes:

  • La estructura, básicamente, es la misma. Incluimos igualmente, la cabecera (header), pie (footer) y barra lateral (sidebar).
  • Hemos añadido el marcador class=”articulosolo” a la sección id=”main” para, si queremos, conferirle estilos específicos en el CSS.
  • Quitamos la estructura if … else … endif, ya que resulta lógico que el artículo existe, ya que hemos llegado a través de su propio vínculo.
  • Parecería lógico eliminar el ‘loop’, pero recordad que las funciones the_title()the_content() sólo funcionan dentro del ‘loop’.
  • Al título del post le hemos eliminado el vínculo al permalink, ya que es absurda una página que se llama a si misma (error que es muy frecuente, por otro lado).

Ahora, vamos a ver otras funciones del ‘loop’ de WordPress, cuyo uso nos enriquecerán mucho nuestra web:

  • the_author() muestra el autor del post. Debe utilizarse dentro del ‘loop’.
  • the_category() muestra un vínculo a la categoría o categorías a las que pertenece el post. Esta etiqueta se debe usar dentro del ‘loop’. Puede tener la forma the_category( $separator, $parents, $post_id ) en la que los parámetros son: $separator, cadena opcional con el texto o carácter a mostrar entre vínculos de categorías, y por defecto está vacía; $parents, cadena opcional cuyos valores pueden ser ‘multiple’ para mostrar vínculos a padres e hijos, o ‘single’ para mostrar vínculo sólo a la categoría hijo; y $post_id, es el ID del post, cuyo valor por defecto es el post actual.
  • the_date() muestra o devuelve la fecha de un post, o grupo de posts publicados en la misma fecha (en tal caso, sólo aparece la fecha en el primero del grupo). Se puede utilizar la forma the_date( $format, $before, $after, $echo ), en la que los parámetros son: $format, cadena opcional con el formato para la fecha; $before, cadena opcional para mostrar texto antes de la fecha, por defecto vacía; $after, cadena opcional para mostrar texto después de la fecha, por defecto vacía; $echo, si su valor es ‘true’ muestra la fecha y, si es ‘false’, la devuelve sin mostrarla para utilizarla con PHP.
  • the_ID() muestra el ID numérico del post actual. Debe ir dentro del ‘loop’.
  • the_modified_time( $format ) muestra la hora y el día de la última modificación de un post.
  • the_tags( $before, $separator, $after) muestra enlaces a las etiquetas a las que pertenece el post. Si no tiene etiquetas, no muestra nada. Debe ser utilizada dentro del ‘loop’. Los parámetros son: $before, cadena opcional con el texto a mostrar antes de las etiquetas, por defecto es ‘Tags:’; $separator, texto o carácter a mostrar entre las etiquetas, por defecto es la coma; y $after, cadena con el texto a mostrar después de la última etiqueta, por defecto vacía.
  • the_time( $format ) muestra la hora de publicación del post actual. Debe usarse dentro del ‘loop’. El parámetro opcional $format nos permitirá establecer el formato con el que se visualizará.

Existen otras funciones para trabajar en el ‘loop’, pero las dejo para la investigación personal:

  • the_terms
  • the_title_attribute
  • the_title_rss
  • the_category_rss
  • the_content_rss
  • the_excerpt_rss
  • the_author_posts_link
  • the_author_link
  • the_author_meta
  • the_author_posts
  • the_modified_author

Así pues, vamos a enriquecer un poco la plantilla principal (index.php):

¿Qué hemos hecho?

  1. Para cada uno de los artículos del blog, generamos una caja independiente <div id=”articulo”>…</div>, que luego podremos formatear a nuestro antojo con CSS.
  2. Añadimos bajo el título y en letra pequeña, el autor y la fecha de publicación, la cual, en caso de repetirse, sólo aparece en el primer artículo de dicha fecha.
  3. Añadimos también las categorías a las que pertenece cada post. Esto vendría a ser el equivalente del ‘breadcrumb‘ de Joomla! (para quienes lo conozcan). Las categorías vienen con vínculo, de tal forma que si hacemos clic sobre una de ellas la página cambia a la misma, en la que aparecen los diferentes artículos que pertenecen a la misma. Esto nos dará pie a un próximo artículo en el que desarrollaremos el archivo de plantilla category.php.
  4. Finalmente, tras la etiqueta </div>, añadimos la etiqueta <hr> que nos crea una línea de separación horizontal entre elementos.

También enriquecemos un poco la plantilla single.php:

Hasta aquí este artículo. En el próximo, enriqueceremos la cabecera de nuestra web. Salu2.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *