WP desde cero (6): Funciones del loop II

Seguimos con las funciones del loop. En esta entrada aprenderemos para qué sirven the_category(), the_tags() y the_date().

Roy Lichtenstein

archivado en: WordPress / 4 diciembre, 2012 / taller:

Seguimos con la serie dedicada a WordPress desde cero. En la entrada anterior comenzamos a ver las funciones principales que se pueden aplicar en el loop, como the_title(), the_content() y the_excerpt(). En esta, aprenderemos otras igual de útiles y, además, conoceremos cuál es la diferencia entre una cadena de texto y un array.

5. the_category

Sirve para recuperar las categorías en las que se ha clasificado un post. Su sintaxis más sencilla es:

  • <?php the_category( ['$sep'] ); ?>

Donde $sep hace referencia al elemento que separa un término de otro. Por ejemplo, esta función:

  • <p>Categorías: <?php the_category(', '); ?></p>

Devolvería las categorías separadas por comas:

Categorías: WordPress, PHP

Y esta otra, por guiones (observad que hay espacios en blanco antes y después, para que los términos no aparezcan pegados).

  • <p>Categorías: <?php the_category(' - '); ?></p>

La única dificultad de esta función es cuando necesitamos usar la variante para recoger los datos en bruto, es decir, usando get_the_category.

  • <?php get_the_category(  ) ?>

En las funciones anteriores, solo teníamos un dato —el título, el contenido, el sumario, el enlace permanente—, pero en esta hay varios, por lo que WordPress no devuelve el resultado en una sola cadena de texto, sino en un array. Veamos qué significa esto, aunque es probable que no debamos usarlo jamás para ningún tema sencillo, así que nadie se asuste si no comprendemos bien lo que sigue.

Un array, que en español puede traducirse como matriz o arreglo, es como una especie de tabla, donde en cada fila, en cada posición, hay un valor. Por ejemplo, esta podría ser una matriz con algunos dioses griegos:

posición 0 Zeus
posición 1 Atenea
posición 2 Afrodita

Imaginemos que la matriz se llama $dioses_griegos. Si tratáramos de imprimir su valor en pantalla como hacíamos con las variables, mediante un echo:

  • <?php echo $dioses_griegos ?>

no funcionaría, ya que ni WordPress ni el motor de PHP entenderían bien qué es exactamente lo que tienen que mostrar. Para eso, lo que debemos hacer es especificar qué posición del array queremos recuperar, lo cual se hace indicando su posición, su índice, entre corchetes. Por ejemplo, esto:

  • <?php echo $dioses_griegos[1] ?>

devolvería en pantalla «Atenea».

Así, si quisiéramos recuperar el listado de categorías en una variable en vez de usar the_category() y mostrarlas, tendríamos que hacer algo así:

  • <?php $recoge_matriz_categorias = get_the_category( $id );
  • echo $recoge_matriz_categorias [0];
  • echo $recoge_matriz_categorias [1];
  • echo $recoge_matriz_categorias [n];
  • ?>

Ahora bien, esto nos plantea otro problema, ya que, aparte de que es una lata tener que escribir tantas instrucciones, no podemos saber de antemano en cuántas categorías estará clasificado un post. La solución es similar a la que se usa en el loop de WordPress, es decir, usar un bucle que sea «mientras hay elementos en la matriz, ejecuta tal instrucción».

La única diferencia es que para recorrer matrices, en vez de un while, se usa otro tipo de bucle denominado foreach:

  • foreach ($array as $valor) {
  • sentencias
  • }

o

  • foreach ($array as $clave => $valor) {
  • sentencias
  • }

El argumento indicado entre paréntesis significa que para cada elemento del array, cuando pase el bucle, se denominará de tal forma . Por ejemplo, con esta instrucción recogeríamos todos los dioses del array $dioses_griegos y los iríamos mostrando en pantalla:

  • foreach ($dioses_griegos as $dios) {
  •     echo $dios;
  • }

Sin embargo, es un poco más complicado, ya que el array de categorías no está definido exactamente por un índice de posiciones (0, 1, 2...), sino que es un array asociativo y es como si cada fila estuviera definida por un nombre:

categoría 0 categoría 1
name nombre de la categoría name nombre de la categoría
slug slug de la categoría slug slug de la categoría
description descripción... description descripción...

En los arrays asociativos no se hace referencia a cada elemento por su posición ($mi_array[0]), sino por el nombre que sirve de índice: $mi_array[name], $mi_array[slug]...

O también, indicando su nombre y luego el índice separado por el operador ->

  • $mi_array->name.

El nombre de las categorías se guarda en las «filas» llamadas name, por lo tanto, para recuperarlo podríamos usar este foreach:

  • <?php
  • $array_categorias = get_the_category();
  • foreach($array_categorias as $categoria_individual) {
  • echo $categoria_individual->name;
  • } ?>

Y para recuperar solo el nombre de la primera categoría:

  • <?php
  • $array_categorias = get_the_category();
  • echo $array_categorias[0]->cat_name;
  • ?>

Bueno, si no hemos entendido un pimiento no pasa nada, ya que normalmente solo se usa the_category(); lo único  importante es comprender la diferencia entre que WordPress nos devuelva una cadena de texto singular (string) o una matriz (array).

6. the_tags()

Esta función devuelve las etiquetas, tags en inglés, de un post y su sintaxis básica es:

  • <?php the_tags(); ?>

Que devolvería el listado de etiquetas separadas por comas precedido por el texto «Etiquetas:»

Etiquetas: etiqueta 1, etiqueta 2, etiqueta n

Admite tres parámetros

  • <?php the_tags( $before$sep$after ); ?>

Donde $before es un parámetro para indicar lo que va antes de las etiquetas; $after lo que va después y $sep lo que hay entre cada etiqueta. Por ejemplo, así mostraríamos las etiquetas en una lista:

  • <?php the_tags('<ul><li>','</li><li>','</li></ul>'); ?>

Para manipular las etiquetas hay que recuperarlas en una matriz mediante la función get_the_tags(), que funciona de forma idéntica a get_the_category().

7. the_time() / the_date ()

Con the_time() se recupera la fecha y hora en que fue escrito un post. Su sintaxis es:

  • <?php the_time( $format ); ?>

Como argumento se especifica el formato. Por ejemplo, así:

  • Entrada escrita el: <?php the_time ( 'd/m/Y' ); ?>

mostraría primero el día, luego el mes y por último el año con 4 cifras, separados por la barra inclinada.

Entrada escrita el 04/12/2012

Hay una gran variedad de formatos de fecha, pero con estos nos debería bastar para cualquier web sencilla:

a) día del mes:

  • d: numérico con ceros (01/31)
  • j: numérico sin ceros (1/31)

b) mes:

  • m: numérico con ceros (01/12)
  • n: numérico sin ceros (1/12)

c) año:

  • Y: numérico con cuatro cifras (2012)
  • y: numérico con dos cifras (12)

d) hora

  • a: am, pm
  • A: AM, PM
  • g: hora del 1 al 12 sin ceros (1/12)
  • h: hora del 1 al 12 con ceros (01/12)
  • G: 24 horas sin ceros (0/23)
  • H: 24 horas, con ceros (00-23)
  • i: minutos con ceros (00/59)
  • s:segundos con ceros (00/59)

the_date() funciona de manera similar, pero para las fechas. Sin embargo, en el loop es mejor usar the_time(), ya que the_date() puede dar problemas con post escritos el mismo día.

Bueno, pues ya tenemos otras tres funciones para añadir a nuestro bucle y, como son datos complementarios, vamos a ponerlos en un aside. Así, de momento, el loop que estamos preparando podría parecerse a este fragmento de código:

  1. <div id="primary">
  2. <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <!-- principio del loop -->
  3. <article>
  4. <header>
  5. <h3><a href="<?php the_permalink( ); ?>"> <?php the_title() ; ?> </a></h3>
  6. </header>
  7. <?php the_excerpt() ; ?>
  8. <aside>
  9. <p><?php _e('Clasificado en: ','mmfilesi-bones'); ?>
  10. <?php the_category(', '); ?></p>
  11. <p><?php the_tags(); ?></p>
  12. <?php _e('Escrito el: ','mmfilesi-bones'); ?>
  13. <?php the_time('j/m/Y'); ?></p>
  14. </aside>
  15. </article>
  16. <?php endwhile; else: ?>
  17. <p> <?php _e('Sin entradas', 'mmfilesi-bones'); ?> </p>
  18. <?php endif; ?>
  19. </div> <!-- #primary -->

Lo cual tiene un aspecto horrible porque aún no hemos definido ningún estilo... todo se andará, pero de momento vamos a dejarlo aquí. En la próxima entrada veremos cómo incluir imágenes en el loop.

abrazos++;

|| Tags: ,

valoración de los lectores sobre WP desde cero (6): Funciones del loop II

  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración positiva
  • 5 sobre 5 (11 votos)

¿Te ha parecido útil o interesante esta entrada?
dormido, valoración 1 nadapensativo, valoración 2 un poco sonrisa, valoración 3 a medias guiño, valoración 4 bastante aplauso, valoración 5 mucho

Tú opinión es muy importante, gracias por compartirla!

Los comentarios están cerrados.