X

Como criar um modelo de página central de comentários no WordPress

Uma maneira de aumentar o engajamento dos visitantes é recompensar os comentários deles, exibindo-os em seu site. Além disso, você também pode destacar os principais comentaristas, com um link para o site deles 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á você a:

  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 a um plug-in relacionado a comentários.

Criação de 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 terá a seguinte aparência:

<?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 isso ao topo:

<?php
/*
Nome do modelo: Central de comentários
 */
?>

E salve-o. 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, como “pt-comment-central.php”. Não adicionamos nada a esse modelo de página, mas ele já está funcionando e pode ser selecionado na área do painel Escrever nova página.

Obtenção de comentários

Para este modelo de página, apresentaremos quatro aspectos diferentes dos comentários:

  • Comentários recentes,
  • Trackbacks / Pingbacks recentes,
  • Principais comentaristas,
  • Posts mais comentados,

Primeiro, vamos ver os Comentários recentes:

<h3>Comentários recentes</h3>  
<ul id="cc-recent-comments">      
<?php
  $max = 7; // número do item a ser obtido
  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>Nenhum comentário encontrado.</li>';        
?>
</ul>

A consulta SQL solicita todos os comentários aprovados classificados por data (o mais recente primeiro). $max é onde definimos a quantidade de comentários a serem obtidos, 7 no nosso caso. O resultado do código acima será uma lista não ordenada de comentários recentes:

List of Recent Comments

Com um pouco de CSS, podemos endireitar essa lista para que tenha uma aparência melhor:

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

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

List of Recent Comments with proper CSS

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

O próximo é o Recent Pingbacks / Trackbacks:

<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>Nenhum comentário encontrado.</li>';          
?>
</ul>

O código acima é muito semelhante ao que temos para Comentários recentes, com a única diferença de que agora estamos solicitando comentários com ‘comment_type’ em ‘pingback’ / ‘trackback’, e o modelo também é um pouco diferente. Resultado:

List of Recent Pingbacks and Trackbacks

Aqui está o código para Top Commenters:

<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 comentários)';

$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>Não foi encontrado nenhum comentarista.</li>';  
?>
</ul>

Não há nada de muito surpreendente aqui. No entanto, observe a função legal get_avatar(), que fornecerá o Gravatar de qualquer pessoa cujo endereço de e-mail você especificar. Nesse caso, buscamos a imagem do avatar usando o endereço de e-mail do comentarista. Com o CSS semelhante ao que temos para comentários recentes, podemos obter este resultado:

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

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

List of Top Commenters

O último é o post mais comentado:

<h3>Publicações mais comentadas</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 comentários)';

$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>Não foi encontrado nenhum comentarista.</li>';
?>
</ul>

List of Most Commented Post

E é isso. Em seguida, adicionaremos um pouco mais de frescor, acrescentando algumas coisas que somente o administrador pode ver.

Informações somente para administradores

Para mostrar informações somente 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') ) :
  // Coisas somente para administradores aqui.
  endif;
endif; ?>   

Agora, no Dashboard, temos uma visão rápida do total de comentários de um site, dos aprovados, dos pendentes de revisão e dos comentários de spam. Vamos replicar isso em nosso modelo de página para facilitar o acesso somente para administradores:

<?php 
  $num_comm = wp_count_comments();
?>
Total de comentários: <a href="<?php bloginfo('wpurl'); ?>/wp-admin/edit-comments.php?"><?php echo $num_comm->total_comments; ?></a>
Aprovado: <a href="<?php bloginfo('wpurl'); ?>/wp-admin/edit-comments.php?comment_status=approved"><?php echo $num_comm->approved; ?></a> 
Moderado: <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>

Admin

wp_count_comments() é uma função simples que retorna uma matriz de vários números de estatísticas de comentários. Também estamos adicionando links para a respectiva área de administração de comentários.

Adicionando algumas faíscas

Por fim, digamos que você encontre um plug-in interessante relacionado a comentários que queira incorporar a esse modelo de página. Em vez de adicionar mais códigos, vamos apenas adicionar suporte para ele. Para este exemplo, vou usar o plug-in Activity Sparks, que pode “exibir um gráfico no estilo ‘sparkline’ na barra lateral para indicar a atividade de postagens e/ou comentários”. “Parece ótimo para mim.

Normalmente, o arquivo readme.txt de um plug-in ensinará como adicioná-lo aos arquivos do tema. No nosso caso, o código pode ser o seguinte:

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

ActivitySparks plugin

function_exists() verifica se uma determinada função está disponível; no nosso caso, a função activitysparks, que estará disponível se o plug-in tiver sido carregado e ativado. Se ela estiver lá, mostraremos o gráfico. Se não estiver, nosso modelo de página não mostrará nada (mas continuará funcionando bem, sem erros).

Resultado e exemplo

Um exemplo desse 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 restante do site. O código completo desse 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 foram retirados do plug-in WP Comment Remix. Dê uma olhada no código dele para saber mais sobre o que fazer com os comentários, como excluir os comentários do administrador dos principais comentaristas ou como levar em conta somente os comentários recentes. O $template que usamos para formatar a saída também pode ser aprendido nessa página.
  • Criando seu próprio modelo de página no WordPress Codex.
  • Tutorial de exibição de conteúdo somente para administradores no WPCandy.
  • Comentários   Deixe uma resposta

    1. good

    2. Great tutorial Hafiz!

      And if I’m not wrong this is the first guest post? if so woot!
      Maybe I’ll be next 😛

    3. Definitely some things here that I want to implement on my photoblog once I get it converted to WordPress. Thanks!

      1. Hey Kim, awesome. Let us know how it works out once you implement it.

    4. 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’ );

      1. 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);

      2. Exactly, _wp_get_comment_list() returns an array of all comments so from there, you would simply run a foreach loop.

      3. Learn something new every day. Will take a good look at that function, thanks Ptah 🙂

    Adicionar um comentário

    Ficamos felizes por você ter optado por deixar um comentário. Lembre-se de 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.

WordPress Launch Checklist

A lista de verificação definitiva para o lançamento do WordPress

Compilamos todos os itens essenciais da lista de verificação para o lançamento de seu próximo site WordPress em um ebook prático.
Sim, envie-me o livro eletrônico gratuito grátis!