Cómo crear una página con los posts más leídos en el blog

Cómo crear una página con los posts más leídos en el blog

postmasleidos

Quizá os habéis fijado que desde hace algunas semanas se muestran en la barra lateral del blog un listado de los posts más leídos en los últimos 30 días. También hemos creado una sección donde podéis ver los posts más leídos por cada año de vida del blog.

Ello es posible gracias a la implementación de un sistema que registra las visitas a cada post y va guardando un contador en un campo personalizado en cada uno de los posts. Luego, ese campo puede recuperarse de la base de datos con una sencilla función que permite mostrar un listado de posts ordenados en función de diferentes parámetros.

Para implementarlo en tu blog lo primero que hay que hacer es copiar este código y pegarlo en el archivo functions.php del theme de WordPress que estés usando:

function wpb_set_post_views($postID) {$count_key = 'wpb_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);}} //To keep the count accurate, lets get rid of prefetching remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);

function wpb_get_post_views($postID){$count_key = 'wpb_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';}

Luego debemos colocar en el archivo single.php la llamada a la función, para que vaya registrando las visitas:

<?php wpb_set_post_views(get_the_ID()); ?>

Si queremos mostrar el contador en los posts, añadiremos este código allí donde queremos que se muestre:

<?php wpb_get_post_views(get_the_ID()); ?>

Por último, para crear una página donde se muestren los posts ordenados por popularidad tenemos que crear un nuevo template de página. Para ello podemos duplicar el archivo page.php, darle un nombre descriptivo y añadir al comienzo del mismo el nombre que vamos a darle al template así:

<?php
/
Template Name: Populares 2014
/
?>

Luego sustituimos <?php the_content(); ?> por la siguiente consulta:

<?php
$popularpost = new WP_Query( array( 'posts_per_page' => 4, 'meta_key' => 'wpb_post_views_count', 'orderby' => 'meta_value_num', 'order' => 'DESC' ) );
while ( $popularpost->have_posts() ) : $popularpost->the_post(); ?>
<a href="<?php the_permalink(); ?>"> <?php echo the_title(); ?> </a> <?php echo wpb_get_post_views(get_the_ID()); ?>
<?php endwhile;?>

Donde posts_per_page es el número de posts que queremos mostrar. Adicionalmente se pueden incluir parámetros temporales. Por ejemplo, para mostrar sólo los posts más populares publicados en los últimos 30 días el código quedaría así:

<?php
$popularpost = new WP_Query( array( 'posts_per_page' => 4, 'meta_key' => 'wpb_post_views_count', 'orderby' => 'meta_value_num', 'order' => 'DESC', 'date_query' => array (array('column' => 'post_date_gmt', 'after' => '1 month ago') ) ) );
while ( $popularpost->have_posts() ) : $popularpost->the_post(); ?>
<a href="<?php the_permalink(); ?>"> <?php echo the_title(); ?> </a> <?php echo wpb_get_post_views(get_the_ID()); ?>
<?php endwhile;?>

O si queremos mostrar los posts más populares de 2014 el código sería:

<?php
$popularpost = new WP_Query( array( 'posts_per_page' => 4, 'meta_key' => 'wpb_post_views_count', 'orderby' => 'meta_value_num', 'order' => 'DESC', 'year' => '2014' ) );
while ( $popularpost->have_posts() ) : $popularpost->the_post(); ?>
<a href="<?php the_permalink(); ?>"> <?php echo the_title(); ?> </a> <?php echo wpb_get_post_views(get_the_ID()); ?>
<?php endwhile;?>

Tan sólo quedaría darle formato con CSS, por ejemplo añadiéndole un h3 o h4 al título:

<h3><a href="<?php the_permalink(); ?>"> <?php echo the_title(); ?> </a></h3> <?php echo wpb_get_post_views(get_the_ID()); ?>

Finalmente, crearemos una nueva página en WordPress, eligiendo como template de la misma el que hemos creado.

Adaptado parcialmente del código visto en WPBegginer