Cómo crear una plantilla de página central de comentarios en WordPress

Hola, me llamo Pablo y hoy os traigo un tutorial.

Una forma de aumentar la participación de los visitantes es recompensar sus comentarios mostrándolos en su sitio web. Además, también puede presentar a los principales comentaristas, vinculando a su sitio 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 le enseñará cómo:

  1. crear una plantilla de página,
  2. use consultas SQL en su código para obtener comentarios con diferentes parámetros,
  3. crear una sección de la página que solo pueda ver el administrador,
  4. agregue soporte para un complemento relacionado con 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="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(); ?>

Copie y pegue el contenido de page.php y agréguelo en la parte superior:


<?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 ir con un prefijo para que sea reconocible, digamos “pt-comment-central.php”. No hemos agregado nada a esta plantilla de página, pero está en funcionamiento y se puede seleccionar en el área del panel de control de escritura de nueva página.

Obteniendo comentarios

Para esta plantilla de página, presentaremos cuatro aspectos diferentes de comentarios:

  • Comentarios Recientes,
  • Trackbacks / Pingbacks recientes,
  • Principales comentaristas,
  • Publicaciones más comentadas,

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="https://www.isitwp.com/how-to-create-a-comments-central-page-template-in-wordpress/%au">%an</a> on <a href="%pu#comment-%cid">%pt</a>";
  
  $echoed = 0;
  foreach ($results as $row) 
    $tags = array('%ct','%cd','%g','%pt',"https://www.isitwp.com/how-to-create-a-comments-central-page-template-in-wordpress/%pu","https://www.isitwp.com/how-to-create-a-comments-central-page-template-in-wordpress/%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 (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-recent-comments li 
  width: 100%;
  float: left;
  list-style-type: none;


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


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

El siguiente es 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="https://www.isitwp.com/how-to-create-a-comments-central-page-template-in-wordpress/%au">%an</a> on <a href="%pu#comment-%cid">%pt</a>";
  
  $echoed = 0;
  foreach ($results as $row) 
    $tags = array('%ct','%cd','%g','%pt',"https://www.isitwp.com/how-to-create-a-comments-central-page-template-in-wordpress/%pu","https://www.isitwp.com/how-to-create-a-comments-central-page-template-in-wordpress/%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’ debajo de ‘pingback’ / ‘trackback’, y la plantilla también es un poco diferente. Resultado:

Aquí está el código para Comentaristas principales:


<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="https://www.isitwp.com/how-to-create-a-comments-central-page-template-in-wordpress/%au">%g %an</a> (%c comments)";

$echoed = 0;
foreach ($results as $row) 
    $tags = array('%g',"https://www.isitwp.com/how-to-create-a-comments-central-page-template-in-wordpress/%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 alucinante allí. Nota el fresco get_avatar () Sin embargo, la función le dará el Gravatar para cualquier persona cuya dirección de correo electrónico especifique. En este caso, obtenemos la imagen del avatar utilizando la dirección de correo electrónico del comentarista. Con el CSS similar al que tenemos para los 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;


El último es Publicaciones más comentadas:


<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="https://www.isitwp.com/how-to-create-a-comments-central-page-template-in-wordpress/%pu">%pt</a> (%c comments)";

$echoed = 0;
foreach ($results as $row) 
  $tags = array('%pd','%pt',"https://www.isitwp.com/how-to-create-a-comments-central-page-template-in-wordpress/%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>

Y eso es. A continuación, agregaremos algo de frescura adicional agregando algunas cosas que solo el administrador puede ver.

Información solo 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 de control, obtenemos un vistazo rápido de los comentarios totales, aprobados, pendientes de revisión y spam de un sitio. Repliquemos esto para nuestra plantilla de página para un acceso más fácil y solo para administradores:


<?php 
  $num_comm = wp_count_comments();
?>
Total Comments: <a href="https://www.isitwp.com/how-to-create-a-comments-central-page-template-in-wordpress/<?php bloginfo("wpurl'); ?>/wp-admin/edit-comments.php?"><?php echo $num_comm->total_comments; ?></a>
Approved: <a href="https://www.isitwp.com/how-to-create-a-comments-central-page-template-in-wordpress/<?php bloginfo("wpurl'); ?>/wp-admin/edit-comments.php?comment_status=approved"><?php echo $num_comm->approved; ?></a> 
Moderated: <a href="https://www.isitwp.com/how-to-create-a-comments-central-page-template-in-wordpress/<?php bloginfo("wpurl'); ?>/wp-admin/edit-comments.php?comment_status=moderated"><?php echo $num_comm->moderated; ?></a>
Spam: <a href="https://www.isitwp.com/how-to-create-a-comments-central-page-template-in-wordpress/<?php bloginfo("wpurl'); ?>/wp-admin/edit-comments.php?comment_status=spam"><?php echo $num_comm->spam; ?> </a>

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

Añadiendo algunas chispas

Por último, digamos que encuentra complementos interesantes relacionados con comentarios que desea incorporar en esta plantilla de página. En lugar de agregar más códigos, simplemente agreguemos soporte para ello. Para este ejemplo, iré con Chispas de actividad complemento, que puede “mostrar un gráfico de estilo ‘minigráfico’ en la barra lateral para indicar la actividad de publicación y / o comentario. ”Me suena genial.

Por lo general, el archivo readme.txt de un complemento le enseñará cómo agregarlo a sus archivos de 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 en particular está disponible; en nuestro caso, la función activitysparks, que estará disponible si se ha subido y activado el plugin. Si está ahí, mostramos el gráfico. De lo contrario, nuestra plantilla de página no mostrará nada (pero seguirá funcionando bien, sin errores).

Resultado y ejemplo

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

Créditos y lecturas adicionales

Sin más, me despido.

Deja un comentario