Con el truco que te explico en este post aprenderás a mostrar en WordPress la fecha al estilo de Twitter.

Habitualmente, la fecha en WordPress se muestra en uno de los formatos clásico (algo del estilo “dd/mm/aaaa”). Por ejemplo, actualmente en Blogpocket utilizo “22 Enero, 2014″ para un post publicado el 22 de Enero de 2014. Pero existe otra forma de visualizar las fechas y es la que utiliza Twitter: 3 weeks ago, 2 months ago, 1 year ago, etc.

El truco es muy sencillo y lo ví en Cats who code. Se trata, simplemente, de utilizar, en primer lugar, la siguiente instrucción en aquél lugar de tu plantilla en la que quieras mostrar la fecha. Eso sí, recuerda que debes hacerlo dentro del loop.

1
2
3
<?php
$time = human_time_diff( get_the_time('U') , current_time('timestamp') );
?>

La función get_the_time(‘U’) nos da la fecha de publicación del post y current_time(‘timestamp’) la fecha actual. Esta sentencia devuelve un literal del tipo “X mins/hours/days/weeks/months/years ago”. Es decir; en principio obtendremos el resultado en inglés.

Pero, ¿cómo hacemos para mostrarlo en español?

Existen varias formas. La más fácil es recurrir al proceso de traducción del theme que estés empleando. Para aprender a traducir un theme, te recomiendo este artículo de Ayuda WordPress: Preparar tema WordPress para traducción.

Sin embargo, vamos a ver otro método, más general, ya que, en algunos casos, no podrás hacerlo así o, sencillamente, no te interesará. Por ejemplo, si usas Genesis, la traducción se resuelve sencillamente con un plugin, por lo que no necesitas los archivos de traducción.

El “truco” te servirá también para aprender un poquito de programación en PHP. Observa el código siguiente, que es el que tendrás que utilizar, sustituyendo al que te propuse al principio.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php 
//mostrar la fecha en formato twitter:
$time = human_time_diff( get_the_time('U') , current_time('timestamp') );
$replace = array(
        'hour' => 'hora',
        'hours' => 'horas',
        'day' => 'd&iacute;a',
        'days' => 'd&iacute;as',
        'week' => 'semana',
        'weeks' => 'semanas',
        'month' => 'mes',
        'months' => 'meses',
        'year' => 'a&ntilde;o',
        'years' => 'a&ntilde;os'
    );
    echo "Publicado hace ".strtr($time,$replace);
?>

Con el array creamos una tabla que contiene la traducción. Y la función strtr se encarga de rastrear la variable $time sustituyendo todas las secuencias que encuentre según el patrón definido en el array. La función echo se utiliza para formatear la salida, añadiendo el prefijo “Publicado hace”, como traducción de “X … Ago”.

También se podría conseguir mostrar la fecha en el formato de Twitter pero transcurrido un tiempo volver a mostrarlo de la forma habitual, añadiendo la siguiente pregunta:

1
2
3
4
5
6
7
8
<?php
$time_difference = current_time('timestamp') - get_the_time('U');
if($time_difference <86400) {
//mostrar la fecha en formato twitter
} else {
the_time();
};
?>

Como decía al principio, existen muchas formas de implementar esto, incluso añadiendo una función filtro al archivo functions.php, que veremos en otra ocasión.

Espero que estos trucos (el original de Cats who code) y el mío para traducirlo al español, te sean útiles ;-) .

Un artículo de Antonio Cambronero