Cómo mostrar las entradas más vistas en WordPress

Probablemente, en alguna ocasión te has encontrado con la necesidad de mostrar una lista de los posts más vistos o más populares de tu web. Es muy normal querer destacar las informaciones más relevantes o las que más tráfico tienen en nuestra web.

Pues bien, por defecto, WordPress no tiene ningún mecanismo para almacenar o recuperar la información de sus entradas más relevantes. Como casi siempre, hay un plugin (o varios) que hace esto.

Siempre que buscas un plugin y encuentras 5 o 6 que te pueden ayudar, acabas haciéndote las mismas preguntas y los mismos pensamientos:

  • ¿Cuál es el mejor?
  • ¿Cuál es el que tarda más en actualizarse? ¿Son seguros?
  • ¿Qué opciones tiene uno que no tiene el otro y viceversa?
  • Algunos tienen 1000 opciones, de las cuales no entiendo o no sé cuáles son 900.
  • ¿Influirá esto en el rendimiento de mi sitio?
  • ¿Podré adaptarlo a mi diseño y a lo que espero según mis necesidades?

No te preocupes, porque en este caso, son sólo unas pocas líneas de código y, será sin un plugin, por lo que tendrás el 100% del control de lo que quieres hacer, veamos cómo conseguir esta funcionalidad sin necesidad de instalar plugins.

Construir nuestra propia funcionalidad para obtener los posts más vistos o más populares sin plugins

Sólo tiene que añadir estas 2 funciones a su functions.php, y luego voy a explicar lo que hace cada uno:

function set_post_views() {
if (is_single()) {
$post_ID = get_the_ID();
$count = get_post_meta( $post_ID, 'post_views', true );

if ( $count == '' ) {
delete_post_meta( $post_ID, 'post_views' );
add_post_meta( $post_ID, 'post_views', 1 );
} else {
update_post_meta( $post_ID, 'post_views', ++$count );
}
}
}
add_action( 'wp', 'set_post_views' );

// Función para obtener el número de vistas de un post
function get_post_views($post_ID){
$count = get_post_meta($post_ID, 'post_views', true);

if ($count == ''){
delete_post_meta($post_ID, 'post_views');
add_post_meta($post_ID, 'post_views', 0);
return 0;
}
return $count;
}

En primer lugar, tenemos la función set_post_views () que utilizaremos para contar las visitas a nuestras entradas. La forma de hacerlo es añadiendo esta función a la torre wp. En ese momento, podemos preguntarnos si estamos en un puesto único o en un detalle de un puesto. En ese caso, obtenemos el ID y consultamos las vistas que tiene nuestra entrada a través de un campo personalizado que llamamos post_views. Si está vacío (la primera vez que visitamos un post), lo ponemos a «1». En el caso de que tenga un valor, basta con añadir otro 1 al valor (++ $ count). Con esta función, contaremos cada vez que alguien vea un post.

La segunda función get_post_views() se utilizará para mostrar el número de vistas de nuestro post. Como tenemos el control absoluto, podemos llamar a estos datos en una lista de posts y poner el número de vistas en una etiqueta o insignia, o simplemente poner un texto tipo: Este post fue visto N veces. Por ejemplo, en el bucle single.php, podríamos poner algo así:

<?php
/* Start the Loop */
while ( have_posts() ) : the_post();
$post_views = get_post_views(get_the_ID());?>

<p>Este post fue visto <?php echo sprintf( _n( '%s vez', '%s vezes', $post_views, 'your_textdomain' ), $post_views );?></p>

<?php
endwhile;
/* End of the loop.*/?>

Ahora, si queremos mostrar una lista de los posts más vistos o populares, por ejemplo, en la barra lateral del sitio, tendremos que hacer una consulta como ésta:

<?php
$args = array(
'posts_per_page' => 4,
'meta_key' => 'post_views',
'orderby' => 'meta_value_num',
'order' => 'DESC'
);

$popular_posts = new WP_Query( $args );
while ( $popular_posts->have_posts() ) : $popular_posts->the_post();?>

<h2><?php the_title();?></h2>
<?php the_excerpt();

endwhile;
?>

Esta consulta devolverá las 4 entradas con más visitas. El diseño o la forma en que desea mostrarlo, lo dejo a su imaginación.

Añadir esta información a wp-admin
Ahora, añadiremos la información de los posts más vistos o más populares a la lista de posts en wp-admin. Lo hacemos añadiendo a functions.php las funciones posts_column_views () y posts_custom_column_views ():

// Añadir columna a la lista de todos los posts de wp-admin
function posts_column_views($defaults){
$defaults['post_views'] = __('Visualizações', 'your_textdomain');
return $defaults;
}
add_filter('manage_posts_columns', 'posts_column_views');

function posts_custom_column_views($nombre_columna, $id){
if ($nombre_columna === 'vistas_post'){
echo get_post_views(get_the_ID());
}
}
add_action('manage_posts_custom_column', 'posts_custom_column_views', 5, 2);

Lo que hacen estas funciones es añadir otra columna a la lista de todas las entradas con el número de vistas de cada una de ellas.

¿Qué más puedes hacer?

Como he dicho antes, al hacerlo manualmente (sin un plugin), tienes un control total sobre lo que quieres como resultado, cómo lo quieres, cómo lo vas a mostrar y dónde lo vas a mostrar.

Dejo que su imaginación fluya, si desea tener un control más exhaustivo, por ejemplo:

Si lo que su puesto fue visitado por un bot;
Si se quiere controlar por país;
Si quieres contar o no los usuarios y/o visitantes que han visto el post;
Si quieres controlar si un mismo usuario visita un post varias veces o no;
etc.

Sobre Hugo Calixto

Hugo Calixto¡Hola! Soy Hugo Calixto, Programador WEB y Profesional SEO desde 2017.

Qué hago: Desarrollo sitios personalizados (con o sin Wordpress), administro servidores y soy especialista en SEO (optimización de sitios para motores de búsqueda).

Y lo que más me gusta de mi trabajo es: "Ayudar a la gente" y "Probar de todo" y "usar lo que aprendo para poder hacer cosas nuevas".

¡Oh! Si necesitas ayuda, llama a Hugo Calixto.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

*