Como recuperar os posts mais vistos do blog
Fala galerinha! Vou mostrar como recuperar os posts mais vistos de um blog, de uma maneira bem simples e eficiente!
A primeira coisa a se fazer é garantir que apenas uma visita do usuário seja contada, para isso vamos adicionar uma função lá no functions.php, essa função ficará ativa até que o usuário feche o navagador.
Adicione o seguinte código:
// Verifica se não existe nenhuma função com o nome tutsup_session_start if ( ! function_exists( 'tutsup_session_start' ) ) { // Cria a função function tutsup_session_start() { // Inicia uma sessão PHP if ( ! session_id() ) session_start(); } // Executa a ação add_action( 'init', 'tutsup_session_start' ); }
Agora vamos adicionar uma chave para cada post do site. Ainda no functions.php, adicione este código:
// Verifica se não existe nenhuma função com o nome tp_count_post_views if ( ! function_exists( 'tp_count_post_views' ) ) { // Conta os views do post function tp_count_post_views () { // Garante que vamos tratar apenas de posts if ( is_single() ) { // Precisamos da variável $post global para obter o ID do post global $post; // Se a sessão daquele posts não estiver vazia if ( empty( $_SESSION[ 'tp_post_counter_' . $post->ID ] ) ) { // Cria a sessão do posts $_SESSION[ 'tp_post_counter_' . $post->ID ] = true; // Cria ou obtém o valor da chave para contarmos $key = 'tp_post_counter'; $key_value = get_post_meta( $post->ID, $key, true ); // Se a chave estiver vazia, valor será 1 if ( empty( $key_value ) ) { // Verifica o valor $key_value = 1; update_post_meta( $post->ID, $key, $key_value ); } else { // Caso contrário, o valor atual + 1 $key_value += 1; update_post_meta( $post->ID, $key, $key_value ); } // Verifica o valor } // Checa a sessão } // is_single return; } add_action( 'get_header', 'tp_count_post_views' ); }
Criando o loop
Agora vamos criar o loop. Pode ser ser feito em qualquer lugar do tema, widget ou plugin do site, mas não deve ser feito dentro de outro loop nem dentro do functions.
Código do loop:
<?php $nova_consulta = new WP_Query( array( 'posts_per_page' => 5, // Máximo de 5 artigos 'no_found_rows' => true, // Não conta linhas 'post_status' => 'publish', // Somente posts publicados 'ignore_sticky_posts' => true, // Ignora posts fixos 'orderby' => 'meta_value_num', // Ordena pelo valor da post meta 'meta_key' => 'tp_post_counter', // A nossa post meta 'order' => 'DESC' // Ordem decrescente ) ); ?> <div class="mais-vistos"> <?php if ( $nova_consulta->have_posts() ): ?> <?php while ( $nova_consulta->have_posts() ): ?> <?php $nova_consulta->the_post(); ?> <?php $tp_post_counter = get_post_meta( $post->ID, 'tp_post_counter', true );?> <div class="mais-visto clearfix"> <?php if( has_post_thumbnail() ): ?> <div class="mais-visto-thumbnail"> <a href="<?php the_permalink(); ?>"> <?php the_post_thumbnail('mais-visto-thumbnail'); ?> </a> </div> <!-- .mais-visto-thumbnail --> <?php endif; // has_post_thumbnail ?> <h4 class="mais-visto-titulo"> <a href="<?php the_permalink(); ?>"> <?php the_title();?> </a> (<?php echo $tp_post_counter; ?>) </h4> <!-- .mais-visto-titulo --> </div> <!-- .mais-visto --> <?php endwhile; ?> <?php endif; // have_posts ?> <?php wp_reset_postdata(); ?> </div> <!-- .mais-vistos -->
É isso ai galera! Espero que tenha ajudado!