Como autor do blog eu já tenho instalado há anos um plugin que me mostra isso nas páginas de administração. É bom ser lembrado do nível de engajamento de cada leitor antes de prosseguir. Mas eu queria exibir isso publicamente e a única opção “simples” que achei foi o plugin Comment Counter que tem muita coisa contra ele:
- Atualizado pela última vez há oito anos;
- Apenas 70 instalações registradas;
- Nenhuma avaliação;
- Você ainda precisa editar manualmente;
- Não diz onde você tem que editar manualmente.
Tem tanta coisa contra o plugin que se você pesquisar pelo nome dele na página de adicionar plugins do blog não encontra, apesar de não existirem outros com o mesmo propósito nem com nomes parecidos. É preciso procurar por “Comment Counter Ocean90”.
Mas apesar de tanta coisa contra ele, era o único e estou pouco me lixando para o fato de um software não ser atualizado há oito anos. Decidi arriscar. E só tive dificuldade porque entendo pouco de WordPress e muito menos de PHP.
O procedimento por alto é o seguinte:
- Instale o plugin;
- Insira <?php wp_list_comments(); ?> na função callback que exibe os comentários, no lugar onde você quer que apareçam;
Como achar essa função callback?
Essa é a parte mais difícil do processo para quem, como eu, só mexe com o wordpress uma vez a cada alinhamento planetário.
- Comece abrindo o arquivo comments.php do seu tema;
- Nele você vai encontrar a função wp_list_coments. Um dos parâmetros dessa função é a função “callback”. No meu caso ela se chama “bfa_comments”. Confira na linha 8:
|
1 2 3 4 5 6 7 8 9 10 |
if ( is_single() ) { if ($bfa_ata['separate_trackbacks'] == "Yes") { wp_list_comments(array( 'avatar_size'=>$bfa_ata['avatar_size'], 'reply_text'=>__(' · Comentar','atahualpa'), 'login_text'=>__('Faça o login para comentar ','atahualpa'), 'callback' => 'bfa_comments', 'type' => 'comment' )); |
- Procure por essa função nos arquivos do tema. Como eu uso o tema Atahualpa, o arquivo é bfa_custom_comments.php.
- Observando a função você vai ver como a caixa de comentário é construída. Escolha o lugar mais apropriado para você e insira o código que chama o plugin. No exemplo abaixo eu mostro a inserção na linha 16;
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php function bfa_comments($comment, $args, $depth) { global $bfa_ata; $GLOBALS['comment'] = $comment; ?> <li <?php comment_class($class='clearfix') ?> id="comment-<?php comment_ID(); ?>"> <div id="div-comment-<?php comment_ID(); ?>" class="clearfix comment-container<?php $comment = get_comment($comment_id); if ( $post = get_post($post_id) ) { if ( $comment->user_id === $post->post_author ) echo ' bypostauthor'; } ?>"> <div class="comment-author vcard"> <?php if ($args['avatar_size'] != 0) echo get_avatar( $comment, $args['avatar_size'] ); ?> <span class="authorname"><?php comment_author_link(); ?> - <?php comment_counter();?></span> |
Não é de admirar que o plugin não faça isso automaticamente. Deve ser mais difícil para um programa fazer isso de forma confiável que todo o resto.
Mas é realmente muito simples quando você sabe fazer. O resultado você pode ver aqui no blog:

Eu também tive que editar o arquivo do plugin (comment_count.php) porque “Comentários” estava escrito em alemão, mas depois que você chega aqui, ter que editar o plugin é bobagem. Note que fui obrigado a usar entidades HTML Comentário para a acentuação aparecer corretamente.
|
1 2 3 4 5 6 |
$output = sprintf( $format, $german_plural ? (sprintf( __ngettext('%s Comentário', '%s Comentários', $cc_count), number_format_i18n($cc_count))) : number_format_i18n($cc_count), number_format_i18n($percent, 2) . '%', $german_plural ? (sprintf( __ngettext('%s Comentário', '%s Comentários', $total_comments), number_format_i18n($total_comments))) : number_format_i18n($total_comments) ); |
Por default o plugin conta pelo endereço de email de quem comenta, mas você pode mudar esse e outros parâmetros editando a variável “$args” como mostrado na documentação do plugin. Como o default está bom para mim eu não vou abordar isso aqui agora mas o modo mais “simples” de fazer isso globalmente é editando diretamente a função comment_counter no arquivo do plugin.
|
1 2 3 4 5 6 7 8 9 10 |
function comment_counter($args = '') { $defaults = array( 'routine' => 'email', 'exclude' => array(), 'cc_comment_id' => '', 'echo' => 1, 'format' => '<small>%s</small>', 'german_plural' => 1, 'access' => '' ); |
Como contar pelo endereço de email lidando com comentários que não tem endereço de email
Esse é um caso incomum porque por default todo mundo tem que preencher um endereço de email ao comentar no wordpress. Tão incomum que o autor do plugin não levou em conta. Mas acontece e aí todo mundo nessa situação vai aparecer com a mesma contagem porque para o plugin todos são um cara com o endereço de email “”.
Se não acredita, veja os comentários.
Eu contornei fazendo as seguintes modificações no plugin:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
} elseif ($routine == 'email') { $cache = wp_cache_get($cc_comment_email); if ($cc_comment_email == '') {$cc_count=0;} else{ if ($cache == false) { $count = "SELECT COUNT(comment_author_email) FROM " .$GLOBALS['wpdb']->comments. " WHERE comment_author_email = '$cc_comment_email'"; $cc_count = $GLOBALS['wpdb']->get_var($count); wp_cache_set($cc_comment_email, $cc_count); } else { $cc_count = $cache; } } |
e
|
1 2 3 |
if ($cc_count ==0) return; $output = sprintf( |
Na primeira caixa foram acrescentadas as linhas 3, 4 e 12. Na segunda, a linha 1.
Encontrei um problema. Todo comentário que foi importado do Buzz não tem email definido e por isso todo mundo nessa condição tem “3907 comentários”.
É… então não é beeeem um problema do plugin e sim da importação dos comentários que veio sem e-mail, né?
Sim, mas é um problema também do plugin ao achar que “” é um endereço de email.
A propósito, posso unificar seus endereços de email no banco de dados? Você tem posts usando sua conta BOL que não fazem parte da contagem. E *acho* que você não participou no buzz.
Pode unificar sim, mas eu nunca tive email do BOL, eu acho que usava um do POP. Se tiver comentário perdido meu com algum outro email pode unificar tudo.
Quanto ao Buzz, eu participava sim. Vá até este post aqui:
https://ryan.com.br/blogs/quicktalk/2011/10/fonte-atx-automatica-por-um-preco-razoavel/
Olha eu no segundo comentário lá.
Quanto ao plugin achar que “” é um email, isso resolve molezinha com um filtro no PHP, verificando se o campo vem vazio, ignora a contagem.
Gostei do plugin, vou pendurar ele aqui na lista de coisas a modificar numa futura mexidela que estou querendo fazer no meu blog, tem umas coisas lá que estão me irritando a cada update do WordPress.
Eu sei disso. Mas na hora de falar deu curto circuito nas sinapses.
A Google mudou o URL do perfil dos usuários três vezes durante a existência do Buzz. O seu seria, nessa ordem:
http://www.google.com/profiles/107899749631761510863
https://profiles.google.com/107899749631761510863
https://plus.google.com/107899749631761510863
Você só tinha comentários com o último, por isso eu me enganei.
Ah… lembrando que, o admin comment count eu ja uso a anos também.
Ai que falta faz uma opção de editar os comentários eheheh… outra não sei se isso já vai acontecer automaticamente quando você unificar os emails, mas se não acontecer, e quiser setar o avatar, pode usar este que está aparecendo.
Eu desativei ontem um plugin de edição de comentários que estava ativo há anos porque não consegui ver funcionar. Estava ativo para você?
É inteiramente automático baseado na sua conta no Gravatar. Não conheço modo de definir manualmente um avatar para cada pessoa que comenta.
Comentando tudo aqui num só.
1) Quanto ao google mudar a URL do perfil, bem… isso não me srpreende, o google é a pior empresa que eu conheço que adora quebrar a compatibilidade das coisas, tanto que eu já passei a evitar ao máximo possível serviços do google, uso só o que não tem jeito mesmo, pois enche os picuás cada vez que eles resolvem atualizar alguma coisa e quebram toda a API anterior.
Esses dias atrás mesmo tive que mexer no plugin que faz o login social, e adivinha quem que estava não funcionando???
2) Não aparecia aqui pra mim a opção de editar, bem… pode ser porque normalmente eu não faço login, eu comento só usando nome e email.
3) Ah certo, se está usando o serviço do Gravatar, beleza! Achei que você iria ter que fazer alguma gambiarra pra unificar, mas se só acrescentou o email no lugar essas url antigas do google, ótimo!
Pelo menos os três URLs ainda funcionam! O que é muito decente e até inesperado vindo da Google. Mas o meu banco de dados não sabe que é tudo a mesma coisa.
Já resolvi o problema editando o plugin. Agora “” no campo de email não é mais levado em conta.
Bom… edita o post ali em cima e explica o que modificou, vai que seja útil pra mais alguém.
fui ver minha contagem, não tem :'(
btw: inicialmente usava a conta do gmail, depois passei a usar um genérico, talvez
seja por isso; Jefferson sabe qual é
Homem de Neve, você está usando um endereço falso. Isso cria problemas para o funcionamento do blog.
Eu respeito o direito ao anonimato de todo mundo, especialmente em casos como o seu, que não está usando o anonimato para tumultuar (por isso eu nunca reclamei), mas eu tenho que tomar medidas para evitar os problemas causados pelo endereço falso no servidor.
Aparentemente o plugin só funciona até a versão 5.2 do PHP. Ao mudar para as versões 5.3 ou 5.4 dois erros são exibidos no lugar da contagem:
Warning: explode() expects parameter 2 to be string, array given in …/plugins/comment-counter/comment_count.php on line 65
Warning: array_intersect(): Argument #1 is not an array in …/plugins/comment-counter/comment_count.php on line 65
Porblema aparentemente resolvido mudando o conteúdo da linha
para:
Agora o plugin só está mostrando a contagem pelo URL em vez de pelo email. Depois eu conserto isso.