Tengo una idea, pero no tengo tiempo :(

Sigueme en twitter ;)

Berriart

Separar trackbacks de comentarios

Ya es la segunda persona que después de darse cuenta de que en este blog se encuentran separados los comentarios de los trackbacks, me ha preguntado como puede hacer eso en su blog, ya que no les gusta que un trackback se entrometa en una conversación surgida en los comentarios. Así que os voy a explicar como podéis hacer que los comentarios se muestren debajo del post, debajo de éstos el formulario para comentar y abajo del todo los trackbacks, tal como se hace aquí en Berriart.

Lo primero de todo, es hacer una copia de seguridad de los archivos de la plantilla que vayáis a modificar, nunca se sabe lo que puede pasar o si la váis a liar, y hay que asegurarse que podemos dejar todo como estaba si pasa algo. Seguramente solo tengáis que modificar el archivo comments.php o comments-popup.php, que es normalmente dónde se encuentra la llamada a los comentarios, pero si vuestra plantilla no tienen ninguno de estos archivos seguramente encontréis la llamada en single.php o index.php.

Hay que buscar el lugar del archivo dónde se encuentra “<?php if ($comments) : ?>”, y justo delante hay que colocar lo siguiente:

<?php $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = '$post->ID' AND comment_approved = '1' AND comment_type = '' ORDER BY comment_date"); ?>

Ésto hará que se dejen de mostrar los trackbacks, y dónde antes se mostraba todo junto, ahora solo se mostrarán los comentarios. Luego seguramente se encontrará el formulario para enviar los comentarios que dejaremos tal y como está. Seguramente sea un código parecido a éste:

<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">
<?php if ( $user_ID ) : ?>
<p>Logueado como <a href="<?php echo get_option('siteurl'); ?>/wp-admin/profile.php"> <?php echo $user_identity; ?></a>. <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?action=logout" title="Log out of this account">Salir »</a></p>
<?php else : ?>
<p><input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="1" />
<label for="author"><small>Nombre <?php if ($req) echo "(required)"; ?></small></label></p>
<p><input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="2" />
<label for="email"><small>E-mail (no será publicado) <?php if ($req) echo "(required)"; ?></small></label></p>
<p><input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="3" />
<label for="url"><small>Página Web</small></label></p>
<?php endif; ?>
<p><textarea name="comment" id="comment" cols="100%" rows="10" tabindex="4"></textarea></p>
<p><input name="submit" type="submit" id="submit" tabindex="5" value="Enviar comentario" />
<input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" />
</p>
<?php do_action('comment_form', $post->ID); ?>
</form>

Finalmente, para mostrar debajo los trackbacks que hemos quitado de entre los comentarios, deberemos copiar el siguiente código debajo del formulario:

<?php $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = '$post->ID' AND comment_approved = '1' AND comment_type != '' ORDER BY comment_date"); ?>
<?php if ($comments) : ?>
<h4 id="trackbacksss">Tracbacks</h4>
<ol class="commentlist">
<?php foreach ($comments as $comment) : ?>
<li <?php echo $oddcomment; ?>id="comment-<?php comment_ID() ?>">
<cite><?php comment_author_link() ?></cite> opina:
<?php if ($comment->comment_approved == '0') : ?>
<em>Tu comentario está esperando ser aprovado.</em>
<?php endif; ?>
<br />
<small class="commentmetadata"><a href="#comment-<?php comment_ID() ?>" title="">Publicado el <?php comment_date('j \d\e F \d\e Y') ?> a las <?php comment_time('H:i') ?></a> <?php edit_comment_link('editar','  ',''); ?></small>
<?php comment_text() ?>
</li>
<?php
/* Changes every other comment to a different class */
$oddcomment = ( empty( $oddcomment ) ) ? 'class="alt" ' : '';
?>
<?php endforeach; /* end for each comment */ ?>
</ol>
<?php endif; ?>

Tened en cuenta que puede que el código de vuestra plantilla sea diferente y tengáis que hacer pequeños cambios, para aseguraros lo que podéis hacer es copiar el foreach que muestra los comentarios pero poniendo delante lo siguiente:

<?php $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = '$post->ID' AND comment_approved = '1' AND comment_type != '' ORDER BY comment_date"); ?>

Espero que lo hayáis entendido, pero tened en cuenta que no es un cambio para principiantes. Aún así, si estáis interesados y tenéis alguna duda podeís dejar un comentario.

2 Comentarios
  1. Toni

    Me viene de perlas pues eso mismo me pasa en mi blog, así que lo pondré en practica, muchas gracias.

Deja un comentario

Trackbacks
  1. Separar trackbacks de comentarios en wordpress…

    Artículo dónde se explica como separar los comentarios de los trackbacks en el CMS wordpress modificando tu plantilla….