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. Alguma ideia de como usar isso com um Tipo de Postagem Personalizado?

  2. material incrível exatamente o que eu estava procurando?

    1. legal, fico feliz em saber que você gosta do trecho, aproveite.

      1. Da mesma forma, podemos contar o número de imagens enviadas no site do WordPress? Tenho certeza que podemos.. alguma dica?

  3. Exemplo do Bob é possível?

    Posts mais vistos
    Título do post3 100 visualizações
    Título do post1 50 visualizações
    Título do post2 10 visualizações

  4. qual o impacto de usar esta função no banco de dados do WordPress.. poderei limpar os logs (visualizações) em horários definidos.. ??

    1. Este não é um plugin com muitos recursos, simplesmente ele incrementará a contagem no meta do post em um a cada vez que o post for visualizado.

  5. como remover a palavra  “Visualizações” ?                       

    1. Oi Joj,
      Você verá na linha 09    return $count.’ Views’;
      substitua essa linha pela abaixo e é isso.
      return $count;

  6. Obrigado pelo snippet. Modifiquei ligeiramente setPostViews() para descontar as visualizações de posts de Editores ou superiores:

    function setPostViews($postID) { if (!current_user_can('level_7') ) : $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); } endif; }

    1. Valeu drew, muito legal.

    2. Não está funcionando para mim no localhost. Não tenho certeza por quê, mas toda visualização, independentemente de ser de um nível de Editor ou superior, é contada.

      Em outra nota, como você desabilitaria a contagem da visualização pelo autor do post?

      1. Ops. Não estava logado como administrador durante os testes. (facepalm)

        1. Que bom saber que você conseguiu fazer as coisas funcionarem.

  7. Gabriel Merovingi August 6, 2011 at 10:51 pm

    Oi Kevin!

    Testei este código em uma instalação nova do WP 3.2 e funciona bem. No entanto, notei que, embora deva aumentar a contagem em apenas 1, a minha aumenta em 4. Alguma sugestão sobre o que pode estar errado? 

    Consegui configurar as funções no lugar certo e a única alteração que fiz foi excluir as contagens de visitantes logados. Mesmo sem essa alteração, o código dá 4 visualizações em vez de 1.

    1. Huh, deveria contar apenas uma vez, já que é apenas count++. Você teve outras pessoas visitando seu site enquanto ele estava rodando ou várias abas abertas?

      1. Gabriel Merovingi August 7, 2011 at 12:35 am

        Está no meu localhost. É realmente estranho, mas pode ser apenas alguma coisa do navegador. Obrigado por um pequeno snippet legal, no entanto!

      2. Kevin, Primeiramente, adorei a simplicidade desta solução! Tenho o código funcionando corretamente no meu servidor local, mas notei que, ao recarregar minha página inicial (que contém minhas 5 entradas mais recentes), cada recarregamento da minha página inicial adiciona uma visualização à contagem de cada um dos 5 posts. Há alguma maneira de evitar isso e contar apenas as visualizações reais da página do artigo? Obrigado.

        1. Oi Rgsanchezz, fico feliz em saber que você gostou do snippet. Em relação à sua pergunta, certifique-se de colocar setPostViews(get_the_ID()); dentro do template single.php ou dentro de if(is_singular()) também deve funcionar se você não usar um template single.php, isso deve resolver o problema.

    2. Você usou este snippet em um loop separado? Se sim, você deve colocar o setPostViews(get_the_ID()); fora do loop "mais vistos" para que ele conte o +1 apenas para o post atualmente exibido e não para todos na lista. Por exemplo:

      ERRADO:

             
             
              ( )        CORRETO:                                    ( )       

      1. Desculpe, eu copiei e colei o código na caixa de resposta. Usei o codepad para encurtar o link, verifique lá : )
        http://codepad.org/QOUWc3XB

  8. É apenas uma farsa, nada mais, cara. Se você estiver verificando no Firefox, ele mostrará, mas se você verificar sua URL no Chrome e IE, ela não será exibida lá. Ao verificar no Firefox, ele mostrará apenas suas visualizações, nada mais... e se você acha que é meu problema, apenas me diga.

    1. Oi Sunnysuffy, bem, o snippet não é falso, no entanto, se você tiver um software de cache em execução na sua cópia do WordPress, ele terá problemas para funcionar. Supercache, etc.

  9. Site Review: WordPress Code Snippets | ButlerBlog July 28, 2011 at 11:29 pm

    […] um bom exemplo do tipo de dicas que você encontrará em wpsnipp.com é “Rastrear visualizações de postagens sem um plugin usando post meta.”  Kevin começa descrevendo o que o snippet realizará e, em seguida, dando a você um […]

  10. tasarhane designhouse July 24, 2011 at 10:43 am

    ei, é legal..
    muito obrigado.

    1. Legal, fico feliz que você goste do snippet. 

  11. incrível, obrigado!

    1. de nada @4f9649a2dc0c5d186623a62544564bfe:disqus fico feliz que você goste do snippet!

  12. Nem é preciso dizer que este é um snippet incrível. Mas se houver uma solução para fazê-lo funcionar com plugins de cache, por exemplo, com W3TC, seria ainda melhor.

    De qualquer forma, bom trabalho!

    1. Eu não olhei para isso, vou dar uma olhada mais de perto em alguns dos plugins e ver o que posso fazer. Fico feliz que você goste do snippet, embora. 

      1. Ei Kevin, tenho navegado por fóruns para encontrar uma solução. Aparentemente, muitas pessoas estão tendo problemas para excluir funções do cache. Infelizmente, parece não haver cura até agora. Tenho certeza que há. Vamos torcer para que um de nós encontre algo em breve 🙂

    2. olá, Pelo que sei, o W3TC tem uma opção de “Ignored query stems” para filtrar algumas funções do cache.

  13. oi, boa informação, é possível usar echo getPostViews(get_the_ID()); na seção de posts do painel de administração se eu quiser usar visualizações de posts apenas para fins pessoais/administrativos

    1. Sim, você pode. Postei um snippet logo depois por esse motivo.
      http://wpsnipp.com/index.php/functions-php/display-post-views-within-admin-post-columns/

  14. Andrei Oprinca May 28, 2011 at 2:10 pm

    Isso é incrível, funciona brilhantemente. Vou usá-lo em um novo site de papéis de parede em que estou trabalhando. Anotei seu site nas funções para referência futura.

    Gostaria de saber se algo pode ser feito para registrar apenas 1 visualização por sessão para cada usuário. Seria ótimo para evitar visualizações "falsas" ao atualizar a página. Se alguém puder fazer isso (se é que é possível), seria incrível.

    1. Obrigado @6c9628c836d0d3ed67e8ef3b43a993dd:disqus Fico feliz em saber que você gostou do snippet! Tenho certeza de que algo assim poderia ser feito, no entanto, eu usaria isso como um método para rastrear a popularidade de uma postagem em vez de estatísticas detalhadas.

  15. Estou tendo um problema com isso, se eu visualizo a segunda postagem mais recente, a postagem mais recente ganha 1 visualização, alguma ideia do porquê?

    1. A única razão que consigo pensar é que você não tem a função setPostViews(get_the_ID()); dentro do single.php? você pode confirmar que este é o caso...

      1. Sim, está no single.php dentro do loop

        1. Estou tendo o mesmo problema depois de configurar uma lista de posts mais populares na barra lateral, usando o artigo “most Popular posts using views post meta”. setPostViews(get_the_ID());  está em single.php. setPostViews(get_the_ID());  está em single.php. 

      2. Samuel Francisco July 4, 2011 at 8:28 am

        Eu também estou tendo um problema aqui. O meu está em single.php, eu segui as instruções. No entanto, percebo que se eu visitar um post (com um ID de post, digamos 20), outro post (com um ID de post, digamos 22) também recebe +1 na contagem de visualizações. O estranho é que, quando eu exibo o ID do post recebido pela função setPostViews, apenas o ID do post 20 está sendo exibido na minha tela.

        1. Bem, isso deve funcionar sem problemas, mas se você editar os posts, poderá ver o campo personalizado adicionado com as visualizações atuais do post. Eu recarregaria uma página e veria se o campo personalizado é atualizado em ambos os posts. Qual versão do WordPress você está usando atualmente?

        2. Chris (4O1! Creative) May 2, 2012 at 9:09 pm

          Eu estava tendo o mesmo problema. Levei uma eternidade para descobrir. O problema é causado pelo Wordpress carregando links relacionais para as postagens anterior e seguinte no cabeçalho. O Firefox, por padrão, pré-busca REL links com o valor de Próximo, então ambas as postagens estão sendo "visualizadas".
          A solução que encontrei foi remover a ação que adiciona essa funcionalidade à função wp_head:  remove_action( ‘wp_head’, ‘adjacent_posts_rel_link_wp_head’, 10, 0); 

          1.  Chris, obrigado pelo comentário. Atualizei o post para informar outras pessoas sobre essa correção para o problema. Também adicionei um link para o seu site. Obrigado novamente,

    2. Oi Wprebel, você pode ter um plugin ou outra coisa que causou um problema com o snippet. O snippet é bastante simples e apenas atualiza o post meta quando um usuário carrega o post, não há muito o que dar errado. Sem olhar seu tema em detalhes, eu estaria apenas adivinhando,

    3.   @e4fcff6cc58dc5e1b2ab556d9cdb2cb2:disqus você precisa usar a função getPostViews() quando quiser exibir as visualizações de post e setPostViews() em single.php.

  16. Helpful Tips, Hacks and Tutorials about WordPress - Wordpress Arena April 13, 2011 at 12:06 pm

    […] Rastrear visualizações de posts sem um plugin usando post meta […]

  17. Afficher le nombre de visite par article sans extension en utilisant la balise meta | Un Blog Presque Parfait April 9, 2011 at 9:22 am

    […] Via : link […]

  18. Esta técnica não funcionará com plugins de cache. Eu gostaria de usar o plugin WP-PostViews, pois ele oferece melhor compatibilidade com plugins de cache.

    1. Isso é verdade, ele não funciona bem com plugins de cache. No entanto, como um trecho rápido para rastrear visualizações, funciona muito bem.

  19. Eu renomearia a chave meta post_views_count para _post_views_count para torná-la oculta e evitar que os usuários editem as visualizações de postagem a partir de campos personalizados.

    1. Ah, boa ideia Daniel, você poderia fazer isso.

  20. 20 More WordPress Code Snippets and Hacks March 28, 2011 at 4:02 am

    […] você gostaria de exibir o número de visualizações: <?php echo getPostViews(get_the_ID()); ?> Fonte → Rastrear Quantidade de Visualizações de Postagem Usando Post Meta Este trecho criará uma lista de suas postagens mais populares […]

  21. Existe uma maneira de fazer um resumo dos posts mais vistos?
    Assim como os populares na sua barra lateral, mas usando as visualizações do post em vez dos comentários?

    1. Oi Alec,
      Acabei de terminar um post sobre isso ontem e vou publicá-lo em cerca de uma hora.

    2. Primeira vez que visito seu site, e já meu herói! +1

  22. É possível fazer uma lista das postagens mais visualizadas com base neste código?

    1. Não tenho certeza se entendi, você pode dar mais detalhes?

    2. Exemplo:
      Posts mais vistos
      Título do post3 100 visualizações
      Título do post1 50 visualizações
      Título do post2 10 visualizações

    3. Oi Bob,
      Sim, eu tinha pensado em fazer algo assim, vou brincar um pouco com a ideia e postar um trecho.

  23. Acabei de encontrar este post.
    http://www.moocr.com/blog/posts/2010/display-posts-views-count-without-plugin-in-wordpress.html

    Fiz o que o cara disse. Não parece funcionar. Funciona em localhost?

    1. Deve funcionar bem no host local, no entanto, você precisaria recarregar a página para ver as visualizações. Não se esqueça de colocar setPostViews dentro do loop em single.php. Eu testei no wpsnipp.com para rastrear visualizações e funcionou bem. O que o snippet faz é adicionar um número aos metadados do post e, em seguida, incrementá-lo cada vez que o single.php carrega. Qual versão do wordpress você está executando?

    2. Obrigado. Acabei de descobrir que não estava implementando corretamente.

    3. Legal, fico feliz que você conseguiu fazer tudo funcionar perfeitamente...

  24. Eu tenho que configurá-los manualmente?:/

    1. Sim, você precisaria adicionar este código aos seus templates do wordpress manualmente.

  25. Compartilhamento incrível Chad. Obrigado 😀

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!