A melhor maneira de armazenar visualizações de postagem todos os dias?

Quero acompanhar quantas visualizações uma publicação teve para todos os dias. Para que eu possa obter todo tipo de tendências interessantes depois disso. Por exemplo, a maioria visita nos últimos três dias.

Mas qual é a melhor maneira de armazenar esses dados? A maioria dos tutoriais na busca do Google é sobre apenas armazenar as visualizações totais. Não por dia. Se eu armazenasse as visualizações do dia da mesma forma, provavelmente só faria uma meta de salvar assim:

update_post_meta($post_id, "views_$year-$month-$day", $views + 1); 

Mas não tenho a certeza de que é a melhor maneira quando eu quero facilmente obter diferentes tipos de resultados estatísticos do database? Parece que vai ser um grande número de solicitações de database desnecessárias. E que os metadados do post do WP são feitos para outro tipo de armazenamento de dados.

Solutions Collecting From Web of "A melhor maneira de armazenar visualizações de postagem todos os dias?"

Simplificando, você não , e você não deveria

Os problemas

As condições da corrida tornam os dados não confiáveis

Atualizar meta, opções, termos, etc. não é uma operação atômica. Você precisa buscar a contagem de visualizações, adicionar 1 a ela e, em seguida, enviá-la de volta ao database.

Durante esse processo, ocorreu outra carga de página que faz a mesma coisa, levando à seguinte situação:

  • usuário 1: get_post_meta 5!
  • usuário 2: get_post_meta 5!
  • usuário 1: adiciona 1, 6!
  • usuário 2: adiciona 1, 6!
  • usuário 1: salva update_post_meta, 6 visualizações!
  • usuário 2: salva update_post_meta, 6 visualizações!

Agora, seu contador diz 6, quando deveria dizer 7.

Enormes Custos de Desempenho

As gravações de database são muito mais caras do que lê, e esse sistema envolve uma gravação de database em cada carga de página. Isso não variará, e terá problemas significativos de desempenho e velocidade.

Então, como faço para rastrear vistas de página?

Serviços externos e software. Esses tipos de sistemas precisam ser construídos de forma particular para que eles forneçam informações confiáveis ​​sem serem super lentos. Não é uma tarefa fácil.

Então, em vez disso, use um serviço de terceiros e tire essa informação em intervalos regulares. Você pode fazer um novo pedido toda vez que você visualiza uma página para obter dados 100% precisos, mas isso será ainda mais lento, você não poderá armazenar em cache as páginas, e os tempos de carregamento podem ser superiores a 10 segundos, o que é horrível para SEO e UX.

No meu próprio site, retiro os dados do Google Analytics em cada hora para as 10 principais postagens vistas, as 10 mais recentes e 10 mensagens que não foram verificadas recentemente (eu salve um carimbo de data / hora para o último check-out e use o 10 timestamps mais antigos)

Quando você deseja armazenar os dados por um período de tempo específico, você pode usar a API de Transientes . Mas, esta API é boa para uma pequena quantidade de dados, como opções de tema ou dados semelhantes.

O que você pode fazer é armazenar as visualizações de postagem normalmente e, em seguida, executar um trabalho cron a cada dia e limpar as visualizações. Vejamos um exemplo simples.

 // You update the view counts by using post meta update_post_meta( $post_id, "view_count", $views + 1 ); // Now, let's run a task each day at 00:00 and clear these counts. // If the cron is not scheduled, schedule it for 00:00 if ( ! wp_next_scheduled( 'clear-post-counts' ) ) { wp_schedule_event( strtotime( '00:00:00' ), 'daily', 'clear-post-counts' ); } // Every time this action hook is triggered, the // callback function is run to clear the meta data add_action('clear-post-counts', 'clear_post_counts'); function clear_post_counts(){ // Get a list of all posts $posts = get_posts(); // For each post, set the post views to 0 foreach( $posts as $post ) { update_post_meta( $post->ID, "view_count", 0); } } 

O código é apenas um exemplo de onde começar. Você pode personalizá-lo para atender às suas necessidades específicas.