X

Como Criar um Modelo de Página Central de Comentários no WordPress

Uma maneira de aumentar o engajamento dos visitantes é recompensar seus comentários exibindo-os em seu site. Além disso, você também pode destacar os principais comentaristas, vinculando de volta aos seus sites no processo. Aqui, criaremos um Modelo de Página dedicado para exibir esses comentários e comentaristas em um só lugar.

Em resumo, este tutorial ensinará como:

  1. criar um Modelo de Página,
  2. usar consultas SQL em seu código para buscar comentários com parâmetros variados,
  3. criar uma seção da Página que só pode ser visualizada pelo Administrador,
  4. adicionar suporte para um plugin relacionado a comentários.

Criando um Modelo de Página

A maneira mais fácil de criar um Modelo de Página é abrir o arquivo page.php em seu tema, que se parecerá aproximadamente com isto:

<?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 e cole o conteúdo de page.php e adicione isto ao topo:

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

E salve. Não há regras reais para nomear um arquivo de Modelo de Página, mas é uma boa ideia usar um prefixo para torná-lo reconhecível, digamos “pt-comment-central.php”. Ainda não adicionamos nada a este Modelo de Página, mas ele está funcionando e pode ser selecionado na área do painel de escrita de nova Página.

Buscando Comentários

Para este Modelo de Página, apresentaremos quatro aspectos diferentes de comentários:

  • Comentários Recentes,
  • Trackbacks / Pingbacks Recentes,
  • Principais Comentaristas,
  • Posts Mais Comentados,

Primeiro, faremos os Comentários Recentes:

<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>

A consulta SQL pede todos os comentários aprovados ordenados por data (mais recentes primeiro). $max é onde definimos a quantidade de comentários a serem obtidos, 7 em nosso caso. A saída do código acima será uma lista não ordenada de comentários recentes:

Lista de Comentários Recentes

Com um pouco de CSS podemos arrumar isso para ficar melhor:

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

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

Lista de Comentários Recentes com CSS adequado

$template determina como o texto real será escrito; isso é baseado no formato feito por WP Comment Remix, e você pode seguir esse link para saber mais sobre como personalizá-lo (procure por ‘tokens’).

Em seguida vêm os Pingbacks / Trackbacks Recentes:

<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>

O código acima é muito semelhante ao que temos para Comentários Recentes, as únicas diferenças são que agora estamos solicitando comentários com ‘comment_type’ sob ‘pingback’ / ‘trackback’, e o template também é um pouco diferente. Resultado:

Lista de Pingbacks e Trackbacks Recentes

Aqui está o código para Comentaristas Principais:

<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 muito surpreendente aí. Note a legal função get_avatar(), que fornecerá o Gravatar para qualquer pessoa cujo endereço de e-mail você especificar. Neste caso, buscamos a imagem do avatar usando o endereço de e-mail do comentarista. Com CSS semelhante ao que temos para comentários recentes, podemos ter 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 dos Principais Comentaristas

Por último, temos Posts Mais 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 dos Posts Mais Comentados

E é isso. Em seguida, adicionaremos um pouco mais de legalidade adicionando algumas coisas que apenas o administrador pode ver.

Informações Apenas para Administradores

Para mostrar coisas apenas para os administradores, podemos usar este trecho de código do WPCandy:

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

Agora, no Painel, temos uma visão rápida do total de comentários do site, aprovados, pendentes de revisão e spam. Vamos replicar isso para nosso Modelo de Página para um acesso mais fácil, apenas 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() é uma função interessante que retorna um array com vários números de estatísticas de comentários. Estamos adicionando links para a área de administração de comentários correspondente também.

Adicionando Algumas Faíscas

Por último, digamos que você encontre um plugin legal relacionado a comentários que deseja incorporar a este Modelo de Página. Em vez de adicionar mais códigos, vamos apenas adicionar suporte para ele. Para este exemplo, usarei o plugin Activity Sparks, que pode “exibir um gráfico no estilo ‘sparkline’ em sua barra lateral indicando atividade de posts e/ou comentários.” Parece ótimo para mim.

Geralmente, o arquivo readme.txt de um plugin ensinará como adicioná-lo aos seus arquivos de tema. No nosso caso, o código pode ser assim:

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

plugin ActivitySparks

function_exists() verifica se uma função específica está disponível; em nosso caso, a função activitysparks, que estará disponível se o plugin foi carregado e ativado. Se estiver lá, mostramos o gráfico. Se não, nosso Modelo de Página não mostrará nada (mas ainda funcionará bem, sem erros).

Resultado e Exemplo

Um exemplo deste Modelo de Página está disponível aqui. Ele usa os códigos que você vê aqui com algumas modificações, principalmente para manter a estrutura HTML consistente com o resto do site. Todo o código para esse Modelo de Página está disponível no Pastebin.

Créditos e Leituras Adicionais

  • Os códigos usados para exibir os vários comentários recentes e principais são retirados do plugin WP Comment Remix. Dê uma olhada no código dele para aprender mais coisas sobre comentários, como excluir comentários de administradores dos comentaristas principais ou como considerar apenas comentários recentes. O $template que usamos para formatar a saída pode ser aprendido mais nessa página também.
  • Criando Seu Próprio Modelo de Página no Codex do WordPress.
  • Tutorial de exibição de conteúdo apenas para administradores no WPCandy.
  • Comentários   Deixe uma resposta

    1. bom

    2. Ótimo tutorial Hafiz!

      E se eu não estiver enganado, este é o primeiro post convidado? se for, eba!
      Talvez eu seja o próximo 😛

    3. Definitivamente há algumas coisas aqui que quero implementar no meu photoblog assim que ele for convertido para WordPress. Obrigado!

      1. Olá Kim, incrível. Nos avise como funcionou depois que você implementar.

    4. Ótima ideia, talvez eu implemente algo assim para o meu site.

      Apenas um aviso: em vez de fazer consultas brutas, tente usar isto:

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

      1. Olá Ptah, fico feliz que tenha achado útil. Na verdade, eu estava pensando em implementar uma página semelhante aqui também porque acho que é uma boa maneira de "recompensar" bons comentaristas.

        E obrigado pela dica sobre as consultas SQL brutas. Assumo que isso poderia substituir essencialmente quaisquer instâncias de código como esta?

        $sql = "SELECT p.*, ..."; // e assim por diante
        $results = $wpdb->get_results($sql);

      2. Exatamente, _wp_get_comment_list() retorna um array de todos os comentários, então a partir daí, você simplesmente executaria um loop foreach.

      3. Aprendo algo novo todos os dias. Vou dar uma boa olhada nessa função, obrigado Ptah 🙂

    Adicionar um comentário

    Ficamos felizes que você tenha escolhido deixar um comentário. Por favor, tenha em mente que todos os comentários são moderados de acordo com nossa política de privacidade, e todos os links são nofollow. NÃO use palavras-chave no campo do nome. Vamos ter uma conversa pessoal e significativa.

Checklist de Lançamento WordPress

O Checklist Definitivo para Lançamento de WordPress

Compilamos todos os itens essenciais da lista de verificação para o lançamento do seu próximo site WordPress em um e-book prático.
Sim, envie-me o eBook Gratuito!