Algumas vezes, desenvolvendo alguns dos meus projetos eu me deparava com essa necessidade de criar uma listagem de mais visualizados. Mas eu não queria só instalar um plugin para isso, então pensando nisso hoje eu vou mostrar para vocês como criar uma listagem de posts mais visualizados sem plugin.

Primeiramente você ter que abrir o arquivo functions.php e aplicar a função abaixo, para criar o campo personalizado post_views_count.

“Mas lembrando que ele só vai criar a listagem correta dos post mais acessados a partir da data da aplicação dessa função, os acessos passados não vão ser contados…”

 

<?php
/*
* Set post views count using post meta
*/
function chr_setPostViews($postID) {
$countKey = 'post_views_count';
$count = get_post_meta($postID, $countKey, true);
if($count==''){
$count = 0;
delete_post_meta($postID, $countKey);
add_post_meta($postID, $countKey, '0');
return 'Nenhuma Visualização';
}elseif( is_single($postID) ){
$count++;
update_post_meta($postID, $countKey, $count);
}
return $count . ' Visualização(ões)';
}

Mostrar quantidade de visualizações

Essa função é a responsável por criar o nosso “input personalizado”  que vai receber a quantidade de acessos que o post recebeu e também que será feito o nosso filtro. Mas para que fique mais fácil a visualização da quantidade de acesso, que o post recebeu eu vou aplicar na listagem dos post’s do nosso wp-admin uma nova coluna que vai ficar melhor a visualização:

<?php
/**
* Add a new column in the wp-admin posts list
*/
function chr_posts_column_views( $defaults ) {
$defaults['post_views'] = __( 'Visualização(ões)' );
return $defaults;
}
/**
* Display the number of views for each posts
*/
function chr_posts_custom_column_views( $column_name, $id ) {
if ( $column_name === 'post_views' ) {
echo chr_setPostViews( get_the_ID() );
}
}
add_filter( 'manage_posts_columns', 'chr_posts_column_views' );
add_action( 'manage_posts_custom_column', 'chr_posts_custom_column_views', 5, 2 );

Mostrar quantidade de visualizações

Agora vamos para a aplicação da função que é a responsável pela “contagem” de acesso que a na nossa single receberá, eu como exemplo vou colocar a single.php do meu framework favorito que é o Odin para exemplificar:

 

<?php
/**
* The Template for displaying all single posts.
*
* @package Odin
* @since 2.2.0
*/
get_header(); ?>
<main id="content" class="<?php echo odin_classes_page_sidebar(); ?>" tabindex="-1" role="main">
<?php
// Function for account how many access this post has
chr_setPostViews( get_the_ID() );
// Start the Loop.
while ( have_posts() ) : the_post();
/*
* Include the post format-specific template for the content. If you want to
* use this in a child theme, then include a file called content-___.php
* (where ___ is the post format) and that will be used instead.
*/
get_template_part( 'content', get_post_format() );
// If comments are open or we have at least one comment, load up the comment template.
if ( comments_open() || get_comments_number() ) :
comments_template();
endif;
endwhile;
?>
</main><!-- #main -->
<?php
get_sidebar();
get_footer();
view raw 03-single.php hosted with ❤ by GitHub

Vocês vão ver que eu apliquei a função na linha 12 junto com o get_the_ID() para retornar o ID do post dentro da nossa função.

chr_setPostViews( get_the_ID() );

Sem essa função na nossa single.php o contador de visualização não vai funcionar corretamente, porque é ela que “multiplica”e “atualiza” a quantidade de acesso que o post recebeu.

Agora vamos para a parte de criar o nosso WP_Query personalizado, para gerar a nossa listagem, com o post’s mais acessados:

<?php
// WP_Query arguments
$args = array(
'post_type' => array( 'post' ),
'post_status' => array( 'publish' ),
'orderby' => 'meta_value_num',
'meta_key' => 'post_views_count',
'order' => 'DESC',
'ignore_sticky_posts' => 1,
'posts_per_page' => '4',
);
// The Query
$query_trending = new WP_Query( $args );
$count = 0;
// The Loop
if ( $query_trending->have_posts() ) {
echo '
<article id="box-trending" class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
<h5 class="text-center">Trending</h5>
<dl>';
while ( $query_trending->have_posts() ) { $query_trending->the_post(); $count ++;
echo '
<dd title="' . get_the_title() . ' ('. chr_setPostViews( get_the_ID() ) .')">
<span>' . $count . '.</span><h6><a href="' . get_permalink() . '" title="' . get_the_title() . '">' . wp_trim_words( get_the_title(), 6, '...' ) . '</a></h6>
</dd>';
}
} else {
echo '<dd>No posts viewed...</dd>';
}
echo '</dl>
</article>
';
// Restore original Post Data
wp_reset_postdata();

Nesse WP_Query eu trabalhei com  os atributos padrões para um loop a partir de post publicados, mas eu adicionei os argumentos meta_key e orderby.

No meta_key eu “chamei” o nome do nosso campo personalizado post_views_count que criamos para esse tutorial e uma ordenação por meta_value_num que ele irá visualizar os números de acesso e aplicar uma ordenação decrescente do mais à menos acessados.

Agora, abaixo vocês podem ver como irá ficar a nossa função aplicada e com um estilo aplicado:

Exibição dos post mais visualizados

Espero que vocês tenham gostado desse tutorial e até breve ?

Por favor, se você gostou deixe seu like e também se possível compartilhe.

César Ribeiro
Written by

Hi, my name’s Cesar H. Ribeiro, I’m Brazilian and I live in São Paulo country town. I’ve been working with Web Development since 2006, I’m Web Developer Freelancer, my main specialty is deploying custom Web Sites using the WordPress platform with base, transforming PSD/Layouts for Custom Themes. In feel years with Developer Freelancer, I worked with many agencies around the world like: Brazil, Australia, USA, Germany and Austria.

Related Posts