X

Como Rastrear Visualizações de Posts Sem um Plugin Usando Metadados de Post

Snippets por IsItWP

Você está procurando uma maneira de rastrear visualizações de posts sem um plugin usando metadados de post? Embora provavelmente exista um plugin para isso, criamos um snippet de código rápido que você pode usar para rastrear visualizações de posts sem um plugin usando metadados de post no WordPress.

Instruções:

Adicione este código ao arquivo functions.php do seu tema ou a um plugin específico do site:

function getPostViews($postID){
    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count==''){
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
        return "0 View";
    }
    return $count.' Views';
}
function setPostViews($postID) {
    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count==''){
        $count = 0;
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
    }else{
        $count++;
        update_post_meta($postID, $count_key, $count);
    }
}

// Remove issues with prefetching adding extra views
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0); 

Opcionalmente, adicione este código também a uma coluna no painel do WordPress que exibe as visualizações do post:

// Add to a column in WP-Admin
add_filter('manage_posts_columns', 'posts_column_views');
add_action('manage_posts_custom_column', 'posts_custom_column_views',5,2);
function posts_column_views($defaults){
    $defaults['post_views'] = __('Views');
    return $defaults;
}
function posts_custom_column_views($column_name, $id){
	if($column_name === 'post_views'){
        echo getPostViews(get_the_ID());
    }
}

Esta parte do código de rastreamento de visualizações definirá as visualizações do post. Basta colocar este código abaixo dentro do arquivo single.php dentro do Loop do WordPress.

<?php
          setPostViews(get_the_ID());
?>

Observação sobre cache de fragmentos: Se você estiver usando um plugin de cache como o W3 Total Cache, o método acima para definir visualizações não funcionará, pois a função setPostViews() nunca seria executada. No entanto, o W3 Total Cache possui um recurso chamado cache de fragmentos. Em vez do acima, use o seguinte para que setPostViews() seja executado corretamente e rastreie todas as suas visualizações de post, mesmo quando o cache estiver ativado.

<!-- mfunc setPostViews(get_the_ID()); --><!-- /mfunc -->

O código abaixo é opcional. Use este código se você quiser exibir o número de visualizações dentro de seus posts. Coloque este código dentro do Loop.

<?php 
          echo getPostViews(get_the_ID());
?>

Observação: Se esta é a primeira vez que você adiciona trechos de código no WordPress, consulte nosso guia sobre como copiar / colar trechos de código corretamente no WordPress, para não quebrar acidentalmente seu site.

Se você gostou deste trecho de código, considere conferir nossos outros artigos no site, como: 10 melhores plugins de depoimentos do WordPress e como configurar o rastreamento de autores no WordPress com o Google Analytics.

Comentários   Deixe uma resposta

  1. Hàng xách tay April 6, 2013 at 2:45 am

    obrigado

  2. Adicionei o remove_action(), mas ainda assim ele adiciona 1 contagem ao post recente quando abro qualquer um dos posts. Por favor, ajude.

  3. Ei, obrigado cara! Mas eu não consigo a imagem com as visualizações como você mostra aqui. Você pode me ajudar com isso para obter a imagem também.

  4. Tam Nguyen Photography February 1, 2013 at 11:13 pm

    Descobri que este trecho de código não corresponde ao que vejo com minhas estatísticas do Jetpack. Mais alguém tendo o mesmo problema?

  5. ele conta apenas visualizações únicas, como mudar para contar cada visualização (cada atualização)

  6. Dicas incríveis! Muito obrigado.

  7. Dicas incríveis! Obrigado por compartilhar. Eu precisaria de um pouco mais de ajuda, porém.
    Eu gostaria de exibir os posts mais populares apenas da última semana ou mês? Alguém pode ajudar? Obrigado

  8. Ótimo snippet. Funciona maravilhosamente.

    Você sabe se é possível ter agora uma lista de "Categorias Mais Populares", com base nas categorias dos posts mais visualizados?

  9. Tentei este código, ele insere a contagem, mas exibe a mesma contagem para todos os posts, mesmo que eu tenha adicionado

    remove_action( ‘wp_head’, ‘adjacent_posts_rel_link_wp_head’, 10, 0);
    Alguma ideia?

  10. Isso parece funcionar, mas vejo um problema no meu caso específico... Estou usando este código dentro de um widget de barra lateral (adicionando contagem de leitura a uma consulta de posts recentes):

    $args = array( ‘numberposts’ => 3, ‘order’=> ‘ASC’, ‘orderby’ => ‘title’ );
    $postslist = get_posts( $args );
    foreach ($postslist as $post) : setup_postdata($post);
    setPostViews(get_the_ID()); ?>

    Vejo duas coisas:

    – Os três posts listados sempre mostram uma contagem incremental em comparação uns com os outros (post 1 = 0 visualizações, 2 = 1 visualização, 3 = 2 visualizações). Não tenho certeza se isso é preciso.
    – Quando atualizo a página, todos eles têm 3 adicionados à contagem (0, 1 e 2 agora mostram 3, 4 e 5). Eu adicionei o código remove_action ao functions.php, mas parece que não teve efeito.

    Não tenho certeza qual pode ser a causa disso....

  11. quando eu crio uma nova aba no firefox, ela incrementa em 1, mas quando eu atualizo a página, ela incrementa em 2.
    Alguém tem o mesmo problema? por que isso acontece? por causa do navegador?

  12. Justin W Hall May 31, 2012 at 11:53 pm

    hmmmmmm, como posso diminuir em um após, digamos, 24 horas de incremento?

    1. Deixe-me ver se entendi corretamente: você quer subtrair um de cada visualização a cada 24 horas?

      1. Sim, para cada acesso, subtraia um acesso 24 horas depois. Entendeu? Acabei usando um cron job. Se você tiver uma solução mais fácil, estou todo ouvidos.

        1. um cron é a melhor maneira, outra maneira dependeria das pessoas visualizarem uma página para decrementar e poderia facilmente ficar muito atrasado.

  13. WordPress Users: How to Increase Functionality AND Speed Up Your Site - ManageWP May 31, 2012 at 11:00 am

    […] Rastrear visualizações de postagem usando metadados de postagem […]

  14. obrigado cara pelo seu trabalho.. é ótimo

  15. ótimo trabalho
    posso ter o código 
    para mostrar os posts mais visualizados em um widget ou página 
     

  16. Kevin,
    Este script pode ser usado para tipos de postagem personalizados?

    1.  Oi Rafa, deve ser capaz de usar isso sem problemas.

    2.  Ok, vou tentar.  Como fazemos para que as contagens de visualização sejam exibidas nas colunas de postagem do administrador do CPT?

      Obrigado!

      1. Resolvi meu problema, tive que adicionar “post_type=any” à consulta e agora vejo todos os meus tipos de postagem personalizados.

  17. Incrível! Obrigado pelo código, parece estar funcionando muito bem.

  18. Bhaskar Relan March 9, 2012 at 6:27 pm

    Muito obrigado querido… Um ótimo trabalho…

    1.  Ontem eu disse que funciona… mas de alguma forma, quando clicamos em um post, ele calcula bem, mas quando vamos para o segundo post mais novo e depois para o post mais novo, a contagem para o post mais novo é incrementada em 2. Um padrão semelhante pode ser visto com três.

      No caso de três posts, se formos para o terceiro post mais novo, ele será incrementado em 1, mas quando formos para o segundo post mais novo, ele será incrementado em 2 e depois para o post mais novo, ele também será incrementado em 2.

      Seria ótimo se alguém pudesse ajudar com este problema.

      1. eu também, cada post é incrementado em 2. por quê???

  19. funciona no chrome, firefox, mas no safari, ao atualizar a página, o número de visualizações aumenta em 2, existe uma correção, alguém testou no safari?

    1. encontrei o problema, uma linha de código jquery faz com que conte duas vezes ao atualizar, não sei por quê, mas corrigi.

      1. Olá, tenho o mesmo problema. Você pode me ajudar como você corrigiu, por favor? Para mim, conta duas vezes em todos os navegadores.

  20. Olá a todos!!

    Ótimas dicas! Muito obrigado.

    Eu estava pensando se podemos adicionar um dado de "tempo"?
    Porque eu gostaria de mostrar a visualização de ontem / 2 dias atrás / 2 dias atrás etc...?

    1. wp_get_archives permite que você defina um curto período de tempo, algo como isto, eu acho que seria útil.
       
      http://codex.wordpress.org/Function_Reference/wp_get_archives

      1. Ok, eu sei o que você quer dizer, mas não é exatamente o que eu quero.
        Eu gostaria de fazer um tipo de gráfico.
        Para fazer uma função que mostre se a postagem tem visualizações positivas ou negativas. Então eu quero comparar a visualização de ontem e de hoje.

        1. Bem, isso é muito mais complexo, eu sugeriria algo mais simples, pegue um plugin como este.

          http://wordpress.org/extend/plugins/official-statcounter-plugin-for-wordpress/

  21. Oi Kevin – Ótimo trabalho 😉 Pergunta rápida: Funciona perfeitamente para mim, mas a contagem começa do 0. É possível recuperar as visualizações que eu já tinha nos posts? obrigado

    1.  Olá Hugo,
      Bem, o snippet salva nos metadados da postagem, então se você tivesse removido o snippet e o adicionado novamente, ele deveria continuar dos últimos valores. No entanto, você sempre pode editar os campos personalizados para alterar os valores.

  22. Olá 
    Kevin Chard , eu venho do Vietnã, meu inglês não é bom 🙁
    Eu quero te fazer uma pergunta 🙂 : como exibir a visualização de postagens apenas para o administrador (apenas o administrador pode ver a visualização de postagens) 😀
    Você pode enviar o código via meu e-mail 😀

    1.  este trecho exibirá as visualizações de postagens na coluna de postagens dentro do painel. No entanto, se você quiser exibir no site, mas apenas para administradores, você pode fazer isso.

      if(is_admin()){
            echo getPostViews(get_the_ID());
      }

      1. Kevin, como posso configurá-lo para que ele conte apenas visitantes que não são administradores? Esta não é uma questão de exibição, mas de contagem. Tenho certeza que !is_admin() entra nisso, mas não sei onde? Obrigado pelos ótimos trechos, aliás.

        1. Isso deve funcionar para você, basta substituir o código do passo um pelo seguinte.
           
          if(!current_user_can(‘administrator’)){
                echo setPostViews(get_the_ID());
          }

  23. Como podemos exibir as visualizações de postagens apenas na página de administração onde todas as postagens são exibidas. Quero dizer, a página edit.php

  24. como remover a palavra  “Views”?

    1. Christopher McMahon January 8, 2012 at 10:48 am

      Editar Linha 9

  25. Obrigado, estou usando em um site NOVO e está funcionando brilhantemente....

    Estou aprendendo PHP em tempo real, então seu código me ensinou algumas coisas.. OBRIGADO NOVAMENTE…

    1. Legal Zaid, fico feliz em saber que você gosta do site e espero que você aproveite os trechos!

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!