Como otras veces tengo comentado, hay pocas cosas de WordPress que me disgusten. Pero las pocas que hay, conseguí arreglarlas en mayor o menor medida. Concretamente, hay una cosa que no tengo ni idea de por qué la han hecho así y me saca de quicio, pero en los foros de soporte no se ven muchas quejas relacionadas: se trata de la forma de mostrar los trackbacks, mezclados entre los comentarios. Desde el primer día, fue una cosa que me desorientó totalmente. ¿Esto es un comentario? ¿O un trackback? ¿Por qué una web deja un comentario en mi weblog?
. Además, parece que yo no soy el único al que esto le molesta: ya recibí unos cuantos mensajes acerca de publicar cómo se podría hacer esto. Por cierto, podéis sugerirme temas acerca de la modificación de WordPress, no hay ningún problema :)
Como decía, al final decidí separarlos, lo cual resultó bastante sencillo: WordPress almacena tanto los comentarios como los trackbacks (y pingbacks) en la misma tabla. Lo único que los diferencia es que los trackbacks y pingbacks empiezan por <trackback /> o <pingback />, respectivamente. Así que si se tiene un poco de idea de SQL será fácil separarlos. Bastará con concretar un poco más la consulta que se hace para extraer los comentarios, y duplicarla para sacar los trackbacks. Tan sencillo como aquí lo explico:
Vamos a trabajar sólamente sobre el archivo wp-comments.php, localizado en el directorio raíz donde esté WordPress. Lo abrimos con nuestro editor de texto favorito y localizamos la siguiente línea, casi al principio:
$comments = $wpdb->get_results("SELECT * FROM $tablecomments WHERE comment_post_ID = '$id' AND comment_approved = '1' ORDER BY comment_date");
A esta línea le hacemos un pequeño cambio, tal que así:
$comments = $wpdb->get_results("SELECT * FROM $tablecomments WHERE comment_post_ID = '$id' AND comment_approved = '1' AND comment_content NOT LIKE '<%back />%' ORDER BY comment_date");
Copiamos esta línea justo debajo, pero haciendo los cambios señalados (ojo, hay que eliminar el NOT y cambiar la variable de nombre):
$trackbacks = $wpdb->get_results("SELECT * FROM $tablecomments WHERE comment_post_ID = '$id' AND comment_approved = '1' AND comment_content LIKE '<%back />%' ORDER BY comment_date");
Con esto estamos haciendo dos consultas: la primera seleccionará todos los comentarios que no empiecen por <%back />
(el símbolo % en MySQL indica una serie cualquiera de caracteres), mientras que la segunda hará justo lo contrario.
Ahora sólo nos queda mostrar el resultado de la segunda consulta. Localizamos, un poco más abajo, el bloque de código que nos sirve para mostrar los comentarios:
<?php if ($comments) { ?>
<ol id="commentlist">
<?php foreach ($comments as $comment) { ?>
<li id="comment-<?php comment_ID() ?>">
<?php comment_text() ?>
<p><cite><?php comment_type(); ?> <?php _e("by"); ?> <?php comment_author_link() ?> — <?php comment_date() ?> @ <a href="#comment-<?php comment_ID() ?>"<?php comment_time() ?></a></cite> <?php edit_comment_link(__("Edit This"), " |"); ?></p>
</li> <?php } // end for each comment ?>
</ol>
<?php } else { // this is displayed if there are no comments so far ?>
<p>Todavía no hay comentarios.</p>
<?php } ?>
Seguidamente copiamos justo debajo, pero con las pertinentes modificaciones, también señaladas:
<?php if ($trackbacks) { ?>
<ol id="trackbacklist">
<?php foreach ($trackbacks as $trackback) { ?>
<li id="trackback-<?php comment_ID() ?>">
<?php comment_text() ?>
<p><cite><?php comment_type(); ?> <?php _e("by"); ?> <?php comment_author_link() ?> — <?php comment_date() ?> @ <a href="#trackback-<?php comment_ID() ?>"<?php comment_time() ?></a></cite> <?php edit_comment_link(__("Edit This"), " |"); ?></p>
</li> <?php } // end for each comment ?>
</ol> <?php } else { // this is displayed if there are no comments so far ?>
<p>Todavía no hay trackbacks.</p>
<?php } ?>
Y ya está. Esto es lo básico que se necesita para separar comentarios de trackbacks en WordPress. A partir de aquí cada uno deberá modificar el tema a su gusto, y adaptarlo a su plantilla actual si procede (para el ejemplo utilicé la plantilla por defecto). Si tenéis alguna pregunta, no dudéis en dejarme un comentario.
Actualizado: había un error bastante tonto en las consultas y, haciendo las modificaciones que aquí se mostraban, no se mostraban ni comentarios ni trackbacks. Ahora está arreglado; gracias a FrancoG por el aviso.