un blog, o eso creo

Wordpress: separar los comentarios de los trackbacks

Archivado en: WordPress — Martín @ 00:53 24/06/2004

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.

12 comentarios

  • A mi en lo personal me gusto la idea de Wordpress y estaba pensando en buscar la forma de mezclar trackbacks y comentarios en Movable Type ;)

    Comentario por Christian Van Der Henst S. — 24/06/2004 @ 04:54

  • Ya mismo me pongo a probarlo.. gracias :D

    Comentario por FrancoG — 25/06/2004 @ 15:08

  • tengo el WP 1.2 y no me esta funcionando…

    cuando pongo:
    $comments = $wpdb->get_results("SELECT * FROM $tablecomments WHERE comment_post_ID = '$id' AND comment_approved = '1' NOT LIKE ‘< %back />%’ ORDER BY comment_date");

    no me muestra los comentarios.

    Comentario por FrancoG — 25/06/2004 @ 16:41

  • genial!! muchas grácias! este fin de semana lo hago

    Comentario por are — 26/06/2004 @ 02:06

  • A mi me da este error, y no se por qué, seguro que copié mal.. :

    Database error: [You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '< %back />%’ ORDER BY comment_date' at line 1]
    SELECT * FROM wpmanuls_comments WHERE comment_post_ID = ‘170′ AND comment_approved = ‘1′ AND comment_content NOT LIKE ‘< %back />%’ ORDER BY comment_date

    Database error: [You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND comment_approved = ‘1′ AND comment_content ]
    SELECT * FROM wpmanuls_comments WHERE comment_post_ID = ‘ AND comment_approved = ‘1′ AND comment_content LIKE ‘< %back />%’ ORDER BY comment_date

    Comentario por Manuls — 26/06/2004 @ 22:07

  • Probad de nuevo ahora. Resulta que WordPress se hace la picha un lío con las comillas cuando uno pega código, y me estaba haciendo un desbarajuste tremendo con las consultas. Por favor, comentadme si lo probáis y si os funciona o no, y qué error da si no funciona.

    Gracias :)

    Comentario por Martín — 26/06/2004 @ 22:53

  • Pues sigue dando errores, ahora no da error de base de datos, simplemente cuando hacen un tracckback, en vez de eso, sale el último comentario pero de manera bastante extraña.. es raro ¿no?

    Comentario por Manuls — 28/06/2004 @ 12:47

  • [...] bitàcora Memorias de un geek i he vist dues idees que m’han agradat: La primera és separar els comentaris dels trackbacks, ja que [...]

    Pingback por :: pof HeadQuarters :: — 29/07/2004 @ 13:42

  • [...] Separar comentarios, diferenciándolos con líneas desde Bitácoras.com. Diferenciar entre trackbacks y comentarios de Martín. Al paracer [...]

    Pingback por XeoWeb: Posicionamiento y Buscadores » Comentarios y Trackbacks — 31/07/2004 @ 17:08

  • acabo de poner un articulo sobre esto mismo en mi weblog (método alternativo) y ahora me encuentro sin parar articulos sobre este mismo tema en todos los sitios :D

    Comentario por berto — 11/08/2004 @ 03:20

  • [...] ran @ 7:21 pm Separar Trackback y Comentarios… Tampoco me acordaba de cómo se hacía: http://memoriasdeungeek.bitacoras.com/2004/06/wordpress-separar-los-comentarios-de-los-trackbacks/ y corrigiendo el error con esto: http://xeoweb.bi [...]

    Pingback por Fran Weblog » Separar trackback y comentarios — 02/10/2004 @ 19:20

  • nada.. lo copie y pegue.. todo al pie de la letra.. y no me muestra los trackbacks o pings… no se porke..
    se muestra así: http://olivieri.tx.com.ru/index.php?p=30

    help plz! (y como haces para ke los cuente aparte?)
    gracias de antemano

    Comentario por Gianko — 11/01/2005 @ 06:30

Suscripción RSS a los comentarios de esta entrada.

Disculpa, los comentarios están cerrados.