X

Cómo Crear una Plantilla de Página Central de Comentarios en WordPress

Una forma de aumentar la participación de los visitantes es recompensar sus comentarios mostrándolos en tu sitio web. Además, también puedes destacar a los mejores comentaristas, enlazando a sus sitios web en el proceso. Aquí crearemos una Plantilla de Página dedicada para mostrar esos comentarios y comentaristas en un solo lugar.

En resumen, este tutorial te enseñará cómo:

  1. crear una Plantilla de Página,
  2. usar consultas SQL en tu código para obtener comentarios con diferentes parámetros,
  3. crear una sección de la Página que solo sea visible para el Administrador,
  4. agregar soporte para un plugin relacionado con comentarios.

Creación de una Plantilla de Página

La forma más fácil de crear una Plantilla de Página es abrir el archivo page.php en tu tema, que se verá aproximadamente así:

<?php get_header(); ?>
  <div id="content">
    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    <div class="post" id="post-<?php the_ID(); ?>">

    <h2 class="page_title"><?php the_title(); ?></h2>
      <?php the_content(); ?>
    </div>
    <?php comments_template(); ?>
    <?php endwhile; endif; ?>
  </div>

<?php get_sidebar(); ?>
<?php get_footer(); ?>

Copia y pega el contenido de page.php y agrega esto al principio:

<?php
/*
Template Name: Comments Central
 */
?>

Y guárdalo. No hay reglas reales para nombrar un archivo de Plantilla de Página, pero es una buena idea usar un prefijo para que sea reconocible, digamos "pt-comment-central.php". Aún no hemos agregado nada a esta Plantilla de Página, pero está en funcionamiento y es seleccionable en el área del panel de escritura de una nueva Página.

Obtener Comentarios

Para esta Plantilla de Página, presentaremos cuatro aspectos diferentes de los comentarios:

  • Comentarios Recientes,
  • Últimos Trackbacks / Pingbacks,
  • Mejores Comentaristas,
  • Publicaciones con Más Comentarios,

Primero, haremos Comentarios Recientes:

<h3>Recent Comments</h3>  
<ul id="cc-recent-comments">      
<?php
  $max = 7; // number item to get
  global $wpdb;
  $sql = "SELECT c.*, p.post_title FROM $wpdb->comments c INNER JOIN $wpdb->posts p ON (c.comment_post_id=p.ID) WHERE comment_approved = '1' AND comment_type not in ('trackback','pingback') ORDER BY comment_date DESC LIMIT $max";
  $results = $wpdb->get_results($sql);
  
  $template = '%g <a href="%au">%an</a> on <a href="%pu#comment-%cid">%pt</a>';
  
  $echoed = 0;
  foreach ($results as $row) {
    $tags = array('%ct','%cd','%g','%pt','%pu','%au','%an','%cid');
    $replacements = array($row->comment_title,$row->comment_date,get_avatar($row->comment_author_email,'32'),$row->post_title,get_permalink($row->comment_post_ID),$row->comment_author_url,$row->comment_author,$row->comment_ID);
    echo '<li>' . str_replace($tags,$replacements,$template) . '</li>';
    $echoed = 1;
  }
  if ($echoed==0)
      echo '<li>No comment found.</li>';        
?>
</ul>

La consulta SQL solicita todos los comentarios aprobados ordenados por fecha (los más recientes primero). $max es donde establecemos la cantidad de comentarios a obtener, 7 en nuestro caso. La salida del código anterior será una lista desordenada de comentarios recientes:

Lista de Comentarios Recientes

Con un poco de CSS podemos enderezar eso para que se vea mejor:

#cc-recent-comments li {
  width: 100%;
  float: left;
  list-style-type: none;
}

#cc-recent-comments li img {
  float: left;
  margin-top: -5px;
}

Lista de Comentarios Recientes con CSS adecuado

$template determina cómo se escribirá el texto real; esto se basa en el formato creado por WP Comment Remix, y puedes seguir ese enlace para obtener más información sobre cómo personalizarlo (busca ‘tokens’).

A continuación se muestran Pingbacks / Trackbacks recientes:

<h3>Recent Pingbacks / Trackbacks </h3>
<ul id="cc-recent-trackbacks">        
<?php
  $sql = "SELECT c.*, p.post_title FROM $wpdb->comments c INNER JOIN $wpdb->posts p ON (c.comment_post_id=p.ID) WHERE comment_approved = '1' AND comment_type not in ('trackback','pingback') ORDER BY comment_date DESC LIMIT $max";
  $results = $wpdb->get_results($sql);
  
  $template = '%g <a href="%au">%an</a> on <a href="%pu#comment-%cid">%pt</a>';
  
  $echoed = 0;
  foreach ($results as $row) {
    $tags = array('%ct','%cd','%g','%pt','%pu','%au','%an','%cid');
    $replacements = array($row->comment_title,$row->comment_date,get_avatar($row->comment_author_email,'32'),$row->post_title,get_permalink($row->comment_post_ID),$row->comment_author_url,$row->comment_author,$row->comment_ID);
    echo '<li>' . str_replace($tags,$replacements,$template) . '</li>';
    $echoed=1;
  }
  if ($echoed==0)
    echo '<li>No comment found.</li>';          
?>
</ul>

El código anterior es muy similar al que tenemos para Comentarios recientes, las únicas diferencias son que ahora estamos solicitando comentarios con ‘comment_type’ bajo ‘pingback’ / ‘trackback’, y la plantilla también es un poco diferente. Resultado:

Lista de Pingbacks y Trackbacks Recientes

Aquí está el código para los mejores comentaristas:

<h3>Top Commenters</h3>
<ul id="cc-top-commenters">
<?php
$sql = "SELECT comment_author, comment_author_url, comment_author_email, count(comment_ID) as comment_count FROM $wpdb->comments WHERE comment_approved = '1' AND comment_type not in ('trackback','pingback') GROUP BY comment_author, comment_author_url, comment_author_email ORDER BY comment_count DESC LIMIT $max";
$results = $wpdb->get_results($sql);

$template = '<a href="%au">%g %an</a> (%c comments)';

$echoed = 0;
foreach ($results as $row) {
    $tags = array('%g','%au','%an','%c');
    $replacements = array(get_avatar($row->comment_author_email,'32'),$row->comment_author_url,$row->comment_author,$row->comment_count);
    echo '<li>' . str_replace($tags,$replacements,$template) . '</li>';
    $echoed = 1;
}
if ($echoed==0)
    echo '<li>No commenter found.</li>';  
?>
</ul>

Nada demasiado sorprendente ahí. Sin embargo, nota la genial función get_avatar(), que te dará el Gravatar de cualquier persona cuya dirección de correo electrónico especifiques. En este caso, obtenemos la imagen del avatar usando la dirección de correo electrónico del comentarista. Con CSS similar a la que tenemos para comentarios recientes, podemos tener este resultado:

#cc-top-commenters li {
  width: 100%;
  float: left;
  list-style-type: none;
}

#cc-top-commenters li img {
  float: left;
  margin-top: -5px;
}

Lista de los Mejores Comentaristas

Lo último son los Posts más comentados:

<h3>Most Commented Posts</h3>
<ul id="cc-most-comments">
$sql = "SELECT p.*, c.comment_count FROM $wpdb->posts p INNER JOIN (SELECT comment_post_id, count(comment_ID) as comment_count from $wpdb->comments WHERE comment_approved='1' GROUP BY comment_post_id) c ON (c.comment_post_id=p.ID) ORDER BY c.comment_count DESC LIMIT $max";
$results = $wpdb->get_results($sql);

$template = '<a href="%pu">%pt</a> (%c comments)';

$echoed = 0;
foreach ($results as $row) {
  $tags = array('%pd','%pt','%pu','%c');
  $replacements = array($row->post_date,$row->post_title,get_permalink($row->ID),$row->comment_count);
  echo '<li>' . str_replace($tags,$replacements,$template) . '</li>';
  $echoed = 1;
}
if ($echoed==0)
    echo '<li>No commenter found.</li>';
?>
</ul>

Lista de las Publicaciones con Más Comentarios

Y eso es todo. A continuación, agregaremos algo de genialidad extra añadiendo algunas cosas que solo el administrador puede ver.

Información exclusiva para administradores

Para mostrar cosas solo para los administradores, podemos usar este fragmento de código de WPCandy:

<?php 
global $user_ID; 
if( $user_ID ) :
  if( current_user_can('level_10') ) :
  // admin-only stuff here.
  endif;
endif; ?>   

Ahora, en el Panel, obtenemos una vista rápida del total de comentarios de un sitio, aprobados, pendientes de revisión y spam. Vamos a replicar esto para nuestra Plantilla de Página para un acceso más fácil y exclusivo para administradores:

<?php 
  $num_comm = wp_count_comments();
?>
Total Comments: <a href="<?php bloginfo('wpurl'); ?>/wp-admin/edit-comments.php?"><?php echo $num_comm->total_comments; ?></a>
Approved: <a href="<?php bloginfo('wpurl'); ?>/wp-admin/edit-comments.php?comment_status=approved"><?php echo $num_comm->approved; ?></a> 
Moderated: <a href="<?php bloginfo('wpurl'); ?>/wp-admin/edit-comments.php?comment_status=moderated"><?php echo $num_comm->moderated; ?></a>
Spam: <a href="<?php bloginfo('wpurl'); ?>/wp-admin/edit-comments.php?comment_status=spam"><?php echo $num_comm->spam; ?> </a>

Administrador

wp_count_comments() es una función genial que devuelve una matriz con varios números de estadísticas de comentarios. También estamos agregando enlaces al área de administración de comentarios respectiva.

Agregando algunas chispas

Por último, digamos que encuentras un plugin genial relacionado con comentarios que quieres incorporar a esta plantilla de página. En lugar de agregar más código, simplemente agreguemos soporte para él. Para este ejemplo, usaré el plugin Activity Sparks, que puede “mostrar un gráfico de estilo ‘sparkline’ en tu barra lateral que indica la actividad de publicaciones y/o comentarios”. Me parece genial.

Por lo general, el archivo readme.txt de un plugin te enseñará cómo agregarlo a los archivos de tu tema. En nuestro caso, el código puede ser así:

<?php 
  if(function_exists('activitysparks')) {
    activitysparks(array('dataset'=>'legend','height_px'=>100,'width_px'=>600,'period'=>30, 'ticks'=>24));	
  }
?>     

plugin ActivitySparks

function_exists() verifica si una función en particular está disponible; en nuestro caso, la función activitysparks, que estará disponible si el plugin ha sido subido y activado. Si está ahí, mostramos el gráfico. Si no, nuestra plantilla de página no mostrará nada (pero seguirá funcionando perfectamente, sin errores).

Resultado y Ejemplo

Un ejemplo de esta plantilla de página está disponible aquí. Utiliza los códigos que ves aquí con algunas modificaciones, principalmente para mantener la estructura HTML consistente con el resto del sitio web. El código completo de esa plantilla de página está disponible en Pastebin.

Créditos y Lecturas Adicionales

  • Los códigos utilizados para mostrar los diversos comentarios recientes y los más populares se toman del plugin WP Comment Remix. Echa un vistazo a su código para aprender más cosas sobre comentarios, como excluir los comentarios de administradores de los comentaristas principales o cómo tener en cuenta solo los comentarios recientes. El $template que usamos para formatear la salida se puede aprender más de esa página también.
  • Creación de tu propia plantilla de página en el Codex de WordPress.
  • Tutorial sobre cómo mostrar contenido solo para administradores en WPCandy.
  • Comentarios   Deja una respuesta

    1. bueno

    2. ¡Gran tutorial Hafiz!

      Y si no me equivoco, ¿este es el primer post de invitado? ¡Si es así, woot!
      Quizás yo sea el próximo 😛

    3. Definitivamente hay cosas aquí que quiero implementar en mi photoblog una vez que lo convierta a WordPress. ¡Gracias!

      1. Hola Kim, genial. Haznos saber cómo funciona una vez que lo implementes.

    4. Gran idea, quizás implemente algo como esto para mi sitio.

      Solo como información: en lugar de hacer consultas directas, intenta usar esto:

      include ( ABSPATH . ‘wp-admin/includes/template.php’ );
      _wp_get_comment_list( ‘approved’, false, 0, 20, 0, ‘comment’ );

      1. Hola Ptah, me alegra que te haya sido útil. De hecho, estaba pensando en implementar una página similar aquí también porque creo que es una buena manera de “recompensar” a los buenos comentaristas.

        Y gracias por el consejo sobre las consultas SQL directas. ¿Asumo que eso podría reemplazar esencialmente cualquier instancia de código como esta?

        $sql = "SELECT p.*, ..."; // y así sucesivamente
        $results = $wpdb->get_results($sql);

      2. Exacto, _wp_get_comment_list() devuelve un array de todos los comentarios, así que a partir de ahí, simplemente ejecutarías un bucle foreach.

      3. Aprende algo nuevo cada día. Le echaré un buen vistazo a esa función, gracias Ptah 🙂

    Agrega un comentario

    Nos complace que hayas elegido dejar un comentario. Ten en cuenta que todos los comentarios se moderan de acuerdo con nuestra política de privacidad, y todos los enlaces son nofollow. NO uses palabras clave en el campo del nombre. Tengamos una conversación personal y significativa.

Lista de verificación para lanzar WordPress

La lista de verificación definitiva para lanzar WordPress

Hemos recopilado todos los elementos esenciales de la lista de verificación para el lanzamiento de tu próximo sitio web de WordPress en un práctico ebook.
¡Sí, envíame el eBook gratis!