Cambia la estructura de los comentarios en WordPress 2.7
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',' ','') ?></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
- Comienza un link
- 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:
- Contenido del link
- Contenido antes del link
- 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('» Editar «',' | ',' | ')
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('» Editar «',' | ',' | ') ?></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.
Parece que en la versión RC1 de WordPress 2.7 ya no es necesario modificar los archivos.
Ahora los comentarios tienen la misma estructura que la que defines en el panel de administración.
hola que tal, tengo algunas dudas, en la seccion de comentarios quisiera que se pudieran expandir y contraer eso es posible?, limitarlo a un numero determinado de comentarios para evitar que aumente demasiado el tamaño de la pagina, o que los comentarios se muestren en paginas dentro de la misma pagina sin salirse de ella.
@lalo: WordPress 2.7 inlcuye paginación de comentarios, es decir, cada X comentarios (por defecto 10) se crea una nueva página de comentarios.
Sobre el tema de contraer y expandir artículos, eso puedes hacer con jQuery.
Hola, el problema que yo tengo es que en el comentario, antes de la fecha y el link a editar me muestra todo esto:
%d 07UTC %B 07UTC %Y en %H:%M 02Sun y lugo la fecha, es decir así:
%d 07UTC %B 07UTC %Y en %H:%M 02Sun, 07 Mar 2010 14:54:25 +000025. (Editar)
Sabéis qué puede ser.
Un saludo,
Tiene pinta de que estás usando una sintaxis incorrecta en la función de mostrar la hora, aunque no sabría decirte con total seguridad cuál es el error.
Revisa la función que usas para mostrar los comentarios, puede que esté ahí el problema.
Muy buen post! Gracias por la info!
Tengo un problema, de buenas a primeras mi wordpress ha dejado de mostrar comentarios y tampoco puedo escribir ninguno. Los que tenia han desaparecido…
¿Aparecen los comentarios en el Panel de Administración de WordPress?
Hola! A mí esto me aparece en el archivo template-tags.php , archivo situado dentro de la carpeta del tema y después en la carpeta inc :)