Cambia la estructura de los comentarios en WordPress 2.7

Beware: This post was published 8 years ago and its content may be outdated.

Una de las nuevas funciones de WordPress 2.7 son los comentarios anidados y varias mejoras en el sistema de comentarios en general.

Estas mejoras están bien, sin embargo a mí la nueva función wp_list_comments() no me gusta demasiado, y me explico:

Imaginad que queremos tener la fecha de los comentarios en formato DD/MM/AAAA, pues bien, yo he mirado en el panel de control de WordPress 2.7 Beta 3 y no he encontrado dicha opción.

Otra posibilidad es que queramos eliminar el “Says:” de los comentarios (si nos fijamos, después del avatar aparece una línea que dice: “Admin Says:”).

En fin, se entiendo a lo que me refiero, ¿no? A personalizar más la forma en que se muestran los comentarios.

Y bien, he estado investigando un poco y he encontrado la forma de personalizar todas estas cosas (y más) desde el código, no del tema, sinó de WordPress en sí.

Comenzando las modificaciones

Antes de nada quiero advertir que vamos a modificar funciones importantes de WordPress, es decir, que si nos equivocamos no estropeamos el tema, estropeamos todo WordPress.

Una vez aclarado esto, abrimos el archivo comment-template.php, en wp-includes.

La función que nos interesa modificar se llama start_el(), y comienza en la línea 1126.

Lo primero que haremos será modificar el “Says:”: o bien lo eliminaremos o lo traduciremos al español, así que vamos unas cuantas más líneas hacia abajo, hasta llegar a la línea 1152.

Si nos fijamos en esta línea, podemos ver:

<?php printf(__('<cite>%s</cite> Says:'), get_comment_author_link()) ?>

Analizando el código podemos ver que %s mostrará el nombre del autor del comentario, además también advertimos que ahí está el “Says:” que queremos modificar.

Cambiarlo es muy sencillo, así que no voy a dedicar más artículo a esto. Simplemente os dejo dos versiones de la misma línea, la primera con el “Says:” traducido y la segunda sin el “Says:”:

<?php printf(__('<cite>%s</cite> Dice:'), get_comment_author_link()) ?>
<?php printf(__('<cite>%s</cite>'), get_comment_author_link()) ?>

Modificando el formato de la fecha

Para cambiar el formato de la fecha de los artículos sólo tenemos que bajar unas cuantas líneas más, hasta llegar a la línea 1159, dodne encontramos:

<div class="comment-meta commentmetadata"><a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID, $page ) ) ?>"><?php printf(__('%1$s at %2$s'), get_comment_date('F jS, Y'),  get_comment_time()) ?></a><?php edit_comment_link('edit','&nbsp;&nbsp;','') ?></div>

Centrémonos en el código PHP. En esta línea ocurren varias cosas:

  • Comienza una capa (con clases comment-meta y commentmetadata)
    • Comienza un link
      • Se muestra la fecha (en formato F jS, Y)
      • Se muestra la hora (en formato 24 horas)
    • Se cierra el link
    • Se muestra el link para editar el comentario
  • Se cierra la capa

La fecha del artículo la muestra la función get_comment_date(), cuyo parámetro indica el formato en que se muestra la fecha.

Es posible que no entendáis lo que significa F jS, Y. Pues bien, estos caracteres llaman a un dato de la fecha.

Me explico: F muestra el mes, j, el día de la semana, s, el sufijo del día en inglés (st, nd, rd, th) e Y muestra el año en formato AAAA.

Esta función admite los mismos caracteres que la función date() de PHP, podéis ver que muestra cada caracter aquí.

Volviendo a la función, para poner otra estructura para la fecha basta con modificar F jS, Y por otra cadena de caracteres.

En mi caso pondré la fecha en formato DD/MM/AAAA, así que dejaré estos caracteres: d/m/Y .

Ahora ya tenemos modificado el formato de la fecha pero aún nos queda un fragmento en inglés: la “unión” entre la fecha y la hora.

Esta “unión” está poco antes de get_comment_date(), está localizada en la función printf().

Si miramos un poco, veremos un fragmento de código así:

printf(__('%1$s at %2$s')

Pues bien, %1$s muestra le fecha, %2$s muestra la hora, y “at” es la “unión” que queremos modificar. Así que cambiaremos “at” por “a las”, dejando ese fragmento así:

printf(__('%1$s a las %2$s')

Modificando el link de editar comentarios

Ya sólo nos queda cambiar el link de editar comentarios, que es mostrado por la función edit_comment_link().

Esta función admite tres parámetros:

  1. Contenido del link
  2. Contenido antes del link
  3. Contenido después del link

Así que para traducir el contenido del link modificamos el primer parámetro, cambiado “edit” por “Editar”, y dejando así la función:

edit_comment_link('&raquo; Editar &laquo;',' | ',' | ')

En resumen, el código de la línea quedará así:

<div class="comment-meta commentmetadata"><a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID, $page ) ) ?>"><?php printf(__('%1$s a las %2$s'), get_comment_date('d/m/Y'),  get_comment_time()) ?></a><?php edit_comment_link('&raquo; Editar &laquo;',' | ',' | ') ?></div>

Por último os dejo una imagen de cómo quedarían las líneas de comment-template.php después de las modificaciones:

Nota final: Todos estas modificaciones valen para WordPress 2.7 Beta 3, es posible que en la versión final modifiquen estas funciones y el tutorial no funcione

Espero que os sirva el tutorial y que cuando esté lista la versión 2.7 final no necesitemos usar este tutorial para cambiar la estructura de la fecha de los comentarios.