Una forma de aumentar la participación de los visitantes es recompensar sus comentarios mostrándolos en su sitio web. Además, también puedes destacar a los comentaristas más destacados, enlazando a su sitio web en el proceso. Aquí vamos a crear una plantilla de página dedicada para mostrar los comentarios y los comentaristas en un solo lugar.
En resumen, este tutorial le enseñará cómo:
- crear una Plantilla de Página,
- utilizar consultas SQL en su código para obtener comentarios con diferentes parámetros,
- crear una sección de la Página que sólo sea visible por el Administrador,
- añadir soporte para un plugin relacionado con los comentarios.
Crear 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 su tema, que se verá más o menos así:
<?php get_header(); ?> <div id="contenido"> <?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 el_contenido(); ?> </div> <?php comentarios_plantilla(); ?> <?php endwhile; endif; ?> </div> <div> <?php get_sidebar(); ?> <?php get_footer(); ?>
Copia y pega el contenido de page.php y añade esto al principio:
<?php /* Nombre de la plantilla: Central de Comentarios */ ?>
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 hacerlo reconocible, por ejemplo “pt-comment-central.php”. No hemos añadido nada a esta Plantilla de Página, pero ya está en funcionamiento y se puede seleccionar en el área del panel de escribir nueva Página.
Obteniendo Comentarios
Para esta plantilla de página, presentaremos cuatro aspectos diferentes de los comentarios:
- Comentarios recientes,
- Trackbacks / Pingbacks recientes,
- Top Comentaristas,
- Entradas más comentadas,
Primero, haremos los Comentarios Recientes:
<h3>Comentarios Recientes</h3> <ul id="cc-comentarios-recientes"> <?php $max = 7; // número de elementos a obtener 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($fila->título_comentario,$fila->fecha_comentario,get_avatar($fila->correo_electrónico_del_autor_del_comentario,32'),$fila->título_post,get_permalink($ID_del_post_del_comentario),$fila->url_del_autor_del_comentario,$fila->autor_del_comentario,$ID_del_comentario); echo '<li>' . str_replace($etiquetas,$reemplazos,$plantilla) . '</li>'; $echoed = 1; } if ($echoed==0) echo '<li>No se ha encontrado ningún comentario.</li>'; ?> </ul>
La consulta SQL pide todos los comentarios aprobados ordenados por fecha (el último 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:
Con un poco de CSS podemos enderezarlo para que se vea mejor:
#cc-recientes-comentarios li { anchura: 100%; float: left; list-style-type: none; } #cc-recientes-comentarios li img { float: left; margin-top: -5px; }
$template determina cómo se escribirá el texto real; esto se basa en el formato hecho por WP Comment Remix, y puedes seguir ese enlace para aprender más sobre cómo personalizarlo (busca ‘tokens’).
Lo siguiente es Pingbacks / Trackbacks recientes:
<h3>Pingbacks / Trackbacks recientes </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($fila->título_comentario,$fila->fecha_comentario,get_avatar($fila->correo_electrónico_del_autor_del_comentario,32'),$fila->título_post,get_permalink($ID_del_post_del_comentario),$fila->url_del_autor_del_comentario,$fila->autor_del_comentario,$ID_del_comentario); echo '<li>' . str_replace($etiquetas,$reemplazos,$plantilla) . '</li>'; $echoed=1; } if ($echoed==0) echo '<li>No se ha encontrado ningún comentario.</li>'; ?> </ul>
El código anterior es muy similar al que tenemos para Comentarios recientes, las únicas diferencias son que ahora estamos pidiendo comentarios con ‘comment_type’ bajo ‘pingback’ / ‘trackback’, y la plantilla es un poco diferente también. Resultado:
Aquí está el código para Top Commenters:
<h3>Los mejores comentaristas</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 comentarios)'; $echoed = 0; foreach ($results as $row) { $tags = array('%g','%au','%an','%c'); $replacements = array(get_avatar($fila->coment_author_email,'32'),$fila->coment_author_url,$fila->coment_author,$fila->coment_count); echo '<li>' . str_replace($etiquetas,$reemplazos,$plantilla) . '</li>'; $echoed = 1; } if ($echoed==0) echo '<li>No se ha encontrado ningún comentarista.</li>'; ?> </ul>
Nada demasiado alucinante. Sin embargo, fíjate en la función get_avatar()
, que te dará el avatar de cualquier persona cuya dirección de correo electrónico especifiques. En este caso, obtenemos la imagen del avatar utilizando la dirección de correo electrónico del comentarista. Con un CSS similar al que tenemos para los comentarios recientes, podemos tener este resultado:
#cc-top-comentadores li { width: 100%; float: left; list-style-type: none; } #cc-top-commenters li img { float: left; margin-top: -5px; }
Last is Most Commented Posts:
<h3>Posts Más Comentados</h3> <ul id="cc-más-comentarios"> $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 comentarios)'; $echoed = 0; foreach ($results as $row) { $tags = array('%pd','%pt','%pu','%c'); $replacements = array($fila->fecha_post,$fila->título_post,get_permalink($fila->ID),$fila->cuenta_comentarios); echo '<li>' . str_replace($etiquetas,$reemplazos,$plantilla) . '</li>'; $echoed = 1; } if ($echoed==0) echo '<li>No se ha encontrado ningún comentarista.</li>'; ?> </ul>
Y eso es todo. A continuación, vamos a añadir un poco de frescura adicional mediante la adición de algunas cosas que sólo el administrador puede ver.
Información sólo para administradores
Para mostrar cosas sólo para los administradores, podemos utilizar este fragmento de código de WPCandy:
<?php global $id_usuario; if( $id_usuario ) : if( current_user_can('nivel_10') ) : // Sólo para administradores. endif; endif; ?>
Ahora, en el panel de control, podemos echar un vistazo rápido a los comentarios totales, aprobados, pendientes de revisión y spam de un sitio. Reproduzcamos esto en nuestra plantilla de página para facilitar el acceso sólo a administradores:
<?php $num_comm = wp_count_comments(); ?> Total de comentarios: <a href="<?php bloginfo('wpurl'); ?>/wp-admin/edit-comments.php?"><?php echo $num_comm->total_comments; ?></a> Aprobado: <a href="<?php bloginfo('wpurl'); ?>/wp-admin/edit-comments.php?comment_status=aprobado"><?php echo $num_comm->aprobado; ?></a> Moderado: <a href="<?php bloginfo('wpurl'); ?>/wp-admin/edit-comments.php?comment_status=moderado"><?php echo $num_comm->moderado; ?></a> Spam: <a href="<?php bloginfo('wpurl'); ?>/wp-admin/edit-comments.php?comment_status=spam"><?php echo $num_comm->spam; ?> </a>
wp_count_comments()
es una función muy útil que devuelve una matriz con varios números de estado de los comentarios. También estamos añadiendo enlaces a las respectivas áreas de administración de comentarios.
Añadiendo algunas chispas
Por último, digamos que encuentras un plugin genial relacionado con los comentarios que quieres incorporar a esta plantilla de página. En lugar de añadir más códigos, vamos a añadir soporte para ello. Para este ejemplo, usaré el plugin Activity Sparks, que puede “mostrar un gráfico estilo ‘sparkline’ en tu barra lateral que indica la actividad de las entradas y/o comentarios”. “Me parece genial.
Normalmente, el archivo readme.txt de un plugin te enseñará cómo añadirlo 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)); } ?>
function_exists()
comprueba si una función concreta está disponible; en nuestro caso, la función activitysparks
, que estará disponible si el plugin ha sido cargado y activado. Si está ahí, mostramos el gráfico. Si no, entonces nuestra plantilla de página no mostrará nada (pero seguirá funcionando correctamente, sin errores).
Resultado y Ejemplo
Un ejemplo de esta Plantilla de Página está disponible aquí. Utiliza los códigos que se ven aquí con algunas modificaciones, sobre todo para mantener la estructura HTML coherente con el resto del sitio web. El código completo de esta 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 comentados se han tomado del plugin WP Comment Remix. Echa un vistazo a su código para aprender más cosas que hacer con los comentarios, como excluir los comentarios del administrador de los primeros comentarios o cómo tener en cuenta sólo los comentarios recientes. El
$template
que utilizamos para dar formato a la salida se puede aprender más de esa página, también. - Creando su propia plantilla de página en el Codex de WordPress.
- Mostrar contenido sólo para administradores en WPCandy.
good
Great tutorial Hafiz!
And if I’m not wrong this is the first guest post? if so woot!
Maybe I’ll be next 😛
Definitely some things here that I want to implement on my photoblog once I get it converted to WordPress. Thanks!
Hey Kim, awesome. Let us know how it works out once you implement it.
Great idea, I might implement something like this for my site.
Just an FYI: instead of doing raw queries, try using this:
include ( ABSPATH . ‘wp-admin/includes/template.php’ );
_wp_get_comment_list( ‘approved’, false, 0, 20, 0, ‘comment’ );
Hey Ptah, glad you found it useful. I was actually thinking of implementing a similar page here too because I think it’s a good way to “reward’ good commenters.
And thanks for the tip about the raw SQL queries. I’m assuming that could essentially replace any instances of code like this?
$sql = "SELECT p.*, ..."; // and so on
$results = $wpdb->get_results($sql);
Exactly,
_wp_get_comment_list()
returns an array of all comments so from there, you would simply run a foreach loop.Learn something new every day. Will take a good look at that function, thanks Ptah 🙂