Contato

Em que podemos ajudar?

HC Developers
Voltar para o blog

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!

Maria Porcina
Autor

Maria Porcina

Desenvolvedora Front-End