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 em 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 sua primeira vez adicionando snippets de código no WordPress, consulte nosso guia sobre como copiar / colar snippets 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. Ops, desculpe, por favor, desconsidere meu comentário anterior. Percebi que estava chamando a função setPostViews várias vezes. Culpa minha…

    Depois de corrigir isso, estou vendo a contagem de visualizações aumentar apenas +2 toda vez que atualizo o post individual.

    Alguém tem uma solução para isso? Não imagino que isso será um grande problema, considerando que a maioria dos usuários não atualizará a página, embora seria bom ter um número de contagem real para exibir..

    Obrigado pelo código 🙂

  2. Como fazer uma contagem aleatória de visualizações entre (600,900)

    por favor ajude..

  3. como faço para parar o aumento automático da contagem ao atualizar a página?

  4. Munna Hossain July 3, 2017 at 12:38 am

    Olá, ótimas dicas. Obrigado por compartilhar conosco. Estou usando um plugin e o Google Analytics para rastrear minhas visualizações de página.

  5. Olá,

    Quero mostrar a contagem dentro da classe meta, meu código meta é:

    como imprimir o contador entre os metadados como autor, data, categorias?

  6. Risk Management Guru December 1, 2016 at 2:24 pm

    Olá,

    Você sabe qual é o nome do campo padrão PHP/wp para visualizações de posts? Eu só quero exibir isso, simples.
    Obrigado.

    Gerente de Risco

  7. tentei mas não funcionou para mim.

  8. Se eu precisar apenas de 5, terei que mudar?

  9. Onde as visualizações do post aparecerão?

    1. Na localização onde você coloca o código dentro do seu template do passo 2.
      echo getPostViews(get_the_ID()); você pode colocar isso dentro de algum html e estilizar se desejar. Mas os dados são salvos nos metadados do post, você deve ser capaz de ver isso quando editar um post na seção de campos personalizados.

      1. w3t cache torna o cache de fragmentos disponível apenas na versão pro $$$

  10. Boa tarde,

    O snippet funciona muito bem, mas preciso redefinir o valor.

    Alguém poderia me ajudar, por favor.

    Tentei isso, mas não funciona – UPDATE wp_postmeta SET meta_value = ‘0’ WHERE wp_postmeta.meta_key =’post_views_count’

    Obrigado

    1. você pode redefinir indo ao banco de dados do seu site, procure por postmeta, clique nele e pesquise por post_view_count e delete todos eles

      1. Desculpe, mas não consigo encontrar este campo no meu banco de dados, por favor, explique como redefinir os contadores para 0. Obrigado

        1. Os metadados do post são encontrados na tabela wp_postmeta. Se nenhuma das linhas na coluna meta_key tiver post_views_count como valor, então é possível que a contagem ainda não tenha sido armazenada no banco de dados.

  11. Olá pessoal, Se alguém procura contar visitas por endereço IP, para contar apenas uma visita por visitante, este é o código certo para fazer isso, espero que esteja funcionando bem para vocês, estas são minhas modificações na função “setPostViews”:

    function setPostViews($postID) { session_start(); $count_key = ‘post_views_count’; $count = get_post_meta($postID, $count_key, true); if($count==”){ // Se a contagem for vazia $count = 0; delete_post_meta($postID, $count_key); add_post_meta($postID, $count_key, ‘0’); }else{ // Se a contagem não for vazia if(!isset($_SESSION[‘post_views_count-‘. $postID])){ // Se a visualização deste post ainda não foi contada na sessão $_SESSION[‘post_views_count-‘. $postID]=”si”; // Marca a visualização como contada na sessão $count++; // Incrementa a contagem de visualizações update_post_meta($postID, $count_key, $count); // Atualiza a contagem de visualizações no banco de dados } } }

    Basta substituir esta função pela antiga e pronto!!

    1. não está funcionando

      1. Lokendra Malviya October 16, 2017 at 1:04 am

        Muito obrigado. O código está funcionando para mim :)

  12. Olá
    Estou usando e é ótimo, mas estou enfrentando um problema irritante
    Ele conta duas vezes em tipos de postagem personalizados.

    Não sei o que fazer para consertar, alguma ajuda?

    1. Você colocou a função setPostViews() dentro do template single.php ou em outro template?

      1. patrick1991groot August 27, 2016 at 6:28 am

        Tenho exatamente o mesmo problema! Sim, coloquei apenas no arquivo single.php... eu uso este plugin icm wp car manager... Também conta por 2 4 6 a cada visita.

  13. Este é um trecho útil. Obrigado por compartilhar!

  14. Modifiquei a função e adicionei para verificar se havia uma sessão ativa da visita do post e então... aqui está;

    function wpb_set_post_views($postID) { session_start(); $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{ if(!isset($_SESSION['post_views_count-' . $postID])){ $_SESSION['post_views_count-' . $postID]='si'; $count++; update_post_meta($postID, $count_key, $count); } } }

    1. e para que serviria isso? algo em especial?

  15. Estou recebendo contagem dupla a cada visualização. Ao visualizar o post, adiciona duas visualizações em vez de uma.

    1. Tenho o mesmo problema. Alguém tem alguma ideia do que seja o problema?

      1. em qual arquivo de template você está colocando a função setPostViews()?

        1. single.php
          Eu tentei colocar setPostViews() tanto dentro quanto fora do loop, mas não consegui resolver o problema.

          1. patrick1991groot August 27, 2016 at 6:29 am

            Também estou tendo o mesmo problema...

          2. Isso funciona chamando a função set views adicionando meta de postagem, então, a menos que seja chamada duas vezes, você só obteria 1 visualização. Eu verificaria seu tema para ter certeza de que nada como loops múltiplos ou algo assim está envolvido. No entanto, a menos que eu visse o single.php do seu tema, eu não poderia ter certeza qual é o problema exato.

        2. Estou tendo o mesmo problema também. no single.php, seja dentro ou fora do loop, ele conta 2 a cada vez que eu atualizo a página...

          Este é o meu tema pessoal também...

          No entanto, notei que criei um template de tema de post personalizado, mantendo-o fora do loop logo abaixo da tag body, e ele só conta uma vez quando atualizo a página...

          Eu também tentei colocá-lo no cabeçalho do header.php e ele só conta uma vez lá também... A única vez que isso não funciona corretamente é quando estou olhando para a página domain.com/blog e a atualizo de lá, o primeiro post na lista do blog conta uma vez..

          ah, tudo bem, eu consigo lidar com isso... obrigado novamente pelo código...

          1. Você pode querer verificar se setPostViews(); está sendo chamado duas vezes de alguma forma, como se o tema estivesse chamando o código do template duas vezes.

  16. Não consigo fazer isso funcionar com o W3 Total Cache. Existe alguma maneira de funcionar com ele ou é absolutamente impossível?

  17. Mais alguém está tendo problemas para fazer o contador funcionar? Estou usando o WordPress 4.2 e tenho o W3 Total Cache instalado. A contagem permanece em 0, não importa o quê (usuário logado, usuário deslogado, atualização da página, cache limpo).

    1. Estou apenas querendo que a contagem funcione pelo backend. Qualquer ideia seria muito apreciada.

      1. eu também!

        1. Você resolveu isso? Acho que posso te ajudar.

  18. fantástico, como faço para que conte as visualizações de posts apenas hoje
    obrigado

  19. Funciona bem em single.php, mas e em category.php. Se você atualizar a página, todos os posts adicionam uma visualização, deveria recuperar o número real de visualizações do post.

    1. Você já descobriu isso? Estou usando o WP 5.2.2 e estou recebendo +2 contagens na atualização... Fora isso, parece que está funcionando....

  20. funciona muito bem, exatamente o que eu queria. obrigado por compartilhar, mano.

  21. Fernando Carrascosa May 15, 2015 at 4:53 am

    Oi!

    Antes de mais nada, obrigado por este script, foi muito útil.

    Tenho uma pergunta, tenho este trecho em um tema personalizado que estou desenvolvendo para redesenhar/recodificar meu portfólio e descobri que em posts personalizados o contador é exibido, mas quando estou no wp-admin ele não mostra o número de visitas que tenho como faz em posts regulares.

    Você tem alguma ideia de como consertar isso?

    Obrigado.

  22. Legal!! Obrigado pelo script!! Muito bom!!

  23. isso só conta minhas visualizações como faço para contar as visualizações de todos?

    1. Olhando o código no post, ele definitivamente deveria estar rastreando visualizações para todos os visitantes.

      Ou você não tem absolutamente nenhum visitante (isso parece improvável), ou você colocou a chamada da função setPostViews() dentro de um bloco condicional que só é acionado se o usuário estiver logado ou for um administrador da página.

  24. Obrigado pelo script. Existe alguma maneira de exibir, por exemplo, os 5 posts mais visualizados?

  25. Finalmente algo simples e funciona muito bem, obrigado

Adicionar um comentário

Ficamos felizes que você escolheu 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!