Back-End

17 mai, 2010

Como separar contagem de comentários, pingbacks e trackbacks

Publicidade

Hoje veremos algo bastante interessante: como separar as
contagens de comentários, pingbacks e trackbacks no seu blog. Para todos
aqueles que gostam de fazer show-off de estatísticas nos seus blogs,
este artigo poderá ser bem interessante. Os colegas do DigWP escreveram uma matéria sobre o assunto e eu a usei como base para desenvolver este artigo.

A ideia é basicamente mostrar os seus contadores de comentários,
pingbacks e trackbacks em separado, embora seja possível também separar
apenas o contador de comentários e deixar os outros dois acumulando
contagem em conjunto. Vamos ver, então, como você pode fazer isso no seu
blog WordPress e facilitar a leitura e o entendimento do seu blog aos seus
leitores.

Separar comentários, pingbacks e trackbacks

A primeira coisa a fazer é separar os diferentes tipos de resposta a
artigos: comentários, pingbacks e trackbacks – são todos formas de
responder a um só artigo. Felizmente, o WordPress torna esse processo
bem simples. Primeiro, abra o seu arquivo single.php e
utilize a seguinte template tag para chamar o seu template comments.php:

comments_template('/comments.php',true);

Esse código irá permitir ao WordPress separar e contar os diferentes
tipos de respostas, baseando-se no objeto $wp_query.
Agora, vamos separar os comentários, pingbacks, e trackbacks. No seu arquivo comments.php, utilize o seguinte código como sendo
o seu loop de comentários:

<?php if (!empty($comments_by_type['comment'])) {
?>
<h3 id="comments">Comentários<h3>

<ol>

<?php wp_list_comments('type=comment'); ?>

</ol>

<?php } if (!empty($comments_by_type['pingback'])) { ?>

<h3 id="pingbacks">Pingbacks</h3>

<ol>

<?php wp_list_comments('type=pingback'); ?>

</ol>

<?php } if (!empty($comments_by_type['trackback'])) { ?>

<h3 id="trackbacks">Trackbacks</h3>

<ol>

<?php wp_list_comments('type=trackback'); ?>

</ol>

<?php } ?>

Essa porção de código simétrico irá mostrar os seus conteúdos da
seguinte forma, assumindo que o seu artigo irá receber pelo menos os
três tipos de respostas em questão:

<h3 id="comments">Comentários<h3>
<ol>
<li>Comentário #1 - Blah blah blah..</li>
<li>Comentário #2 - Blah blah blah..</li>
<li>Comentário #3 - Blah blah blah..</li>
</ol>
<h3 id="pingbacks">Pingbacks</h3>
<ol>
<li>Pingback #1 - Blah blah blah..</li>
<li>Pingback #2 - Blah blah blah..</li>
<li>Pingback #3 - Blah blah blah..</li>
</ol>
<h3 id="trackbacks">Trackbacks</h3>
<ol>
<li>Trackback #1 - Blah blah blah..</li>
<li>Trackback #2 - Blah blah blah..</li>
<li>Trackback #3 - Blah blah blah..</li>
</ol>

Se por acaso o seu artigo não receber um dos tipos de respostas em
questão, esse tipo irá sumir e deixar o seu layout bonito e elegante na
mesma.

Mostrar contadores de respostas separadamente

Agora, para mostrar o contador para cada uma dessas respostas,
chamamos o objeto $wp_query para puxar a informação e
mostrá-la para nós:

<?php echo count($wp_query->comments_by_type['comments']); ?>
<?php echo count($wp_query->comments_by_type['pingback']); ?>
<?php echo count($wp_query->comments_by_type['trackback']); ?>

Cada uma dessas linhas mostra um número que corresponde ao tipo de
resposta em causa. Esse tipo de amostra pode ser integrado no código
anterior para nos dar o resultado final:

<?php if (have_comments()) : global $wp_query; ?>
<h2 id="comments"><?php comments_number('0 Comentários', '1 Comentário', '% Comentários' ); ?><h2>

<?php if (!empty($comments_by_type['comment'])) { ?>

<h3 id="comments"><?php echo count($wp_query->comments_by_type['comment']); ?> Comentários<h3>
<ol>
<?php wp_list_comments('type=comment'); ?>
</ol>

<?php } ?>
<?php if (!empty($comments_by_type['pingback'])) { ?>

<h3 id="pingbacks"><?php echo count($wp_query->comments_by_type['pingback']); ?> Pingbacks</h3>
<ol>
<?php wp_list_comments('type=pingback'); ?>
</ol>

<?php } ?>
<?php if (!empty($comments_by_type['trackback'])) { ?>

<h3 id="trackbacks"><?php echo count($wp_query->comments_by_type['trackback']); ?> Trackbacks</h3>
<ol>
<?php wp_list_comments('type=trackback'); ?>
</ol>

<?php } ?>

<?php else : // if there are no comments yet ?>

<?php if (comments_open()) : ?>
<!-- comments open, no comments -->
<?php else : ?>
<!-- comments closed, no comments -->
<?php endif; ?>

<?php endif; ?>

Usando esse código como o seu loop de comentários, o código irá
separar os comentários, pingbacks e trackbacks, com cada um deles mostrando a quantidade no seu cabeçalho. Esse código é compatível com
WordPress 2.7 ou superior.

Separar comentários apenas dos pingbacks e trackback

Alternativamente, você pode separar os seus comentários e agregar a
contagem dos seus pingbacks e trackbacks. Para conseguir fazer
isso, modificamos o loop de comentários (do primeiro passo) para algo assim:

<?php if (!empty($comments_by_type['comment'])) { ?>	
<h3 id="comments">Comentários<h3>
<ol>
<?php wp_list_comments('type=comment'); ?>
</ol>

<?php } if (!empty($comments_by_type['pings'])) { ?>

<h3 id="trackbacks">Pingbacks &amp; Trackbacks</h3>
<ol>
<?php wp_list_comments('type=pings'); ?>
</ol>

<?php } ?>

Agrupar os pingbacks e trackbacks é fácil graças ao parâmetro “pings”
para o segundo loop wp_list_comments. Depois, para mostrar
as contagens combinadas dos pingbacks e trackbacks, vamos acrescentar o
seguinte código ao cabeçalho “Pingbacks & Trackbacks” (similar ao
segundo passo que demos acima):

<?php echo count($wp_query->comments_by_type['pings']); ?>

Pronto! Depois de colocar tudo no site certo e trabalhar a
100%, você poderá utilizar a sua folha de estilos CSS para customizar a apresentação dos seus
contadores.

Até a próxima!