Wordpress

Contador de visitas en WordPress

Contador de visitas en WordPress

Wordpress

Por distintos motivos podemos necesitar querer saber el número de visitas a nuestros posts en WordPress. Aunque existen ya sistemas muy avanzados de analítica, en este caso crearemos un simple plugin con la funcionalidad justa para poder almacenar el número de visitas a nuestras publicaciones.

Estructura de ficheros

Seguiremos una estructura de archivos muy básica, pero que siendo simple, nos permitirá crear un plugin para WordPress de forma 100% funcional. A continuación se muestra la estructura de ficheros y directorios ordenados alfabéticamente.

  • [re-directory]ada-views-counter
    • [re-directory]admin
      • [re-file]index.php
      • [re-directory]templates
        • [re-file]index.php
        • [re-file]info.php
    • [re-directory]languages
      • [re-file]ada_post_views-es_ES.mo
      • [re-file]ada_post_views-es_ES.po
      • [re-file]index.php
    • [re-file]ada-views-counter.php
    • [re-file]index.php

Funcionalidades

La funcionalidad principal y básica de nuestro plugin será la da elmacenar el número de visitas a cada uno de nuestros posts.

Para ello, guardaremos un contador asociado a cada post que creemos. Este contador ha de incrementarse con cada visita.

Además, añadiremos en el backend de nuestro WordPress este contador asociado a cada post, para que a las personas que administram el blog puedan ver de forma rápida y cómoda el número de visitas.

Detectar visita

Para detectar la visita, utilizaremos una acción de WordPress. En este caso, el hook para the_content, que es invocado a lo hora de mostrar un post en el frontend.

function ada_update_post_views() {
    global $post;
    $count_key = 'post_views_count_test';

    if (is_single() and $post->post_type == 'post') {
        $count = get_post_meta($post->ID, $count_key, true);
        if ($count === false) {
            add_post_meta($post->ID, $count_key, 0);
        } else {
            $count = (int)$count + 1;
            update_post_meta($post->ID, $count_key, $count);
        }
    }
}
add_action('the_content', 'ada_update_post_views');

Mostrar el contador en el frontend

Esto es opcional, ya que con este shortcode mostraremos públicamente el valor de nuestro contador.

Vamos a crear un shortcode identificado como ada_get_post_views que nos retornará el valor del contador.

function ada_get_post_views() {
    global $post;
    $count_key = 'post_views_count_test';
    $count = 0;

    if (is_single() and $post->post_type == 'post') {
        $count = get_post_meta($post->ID, $count_key, true);
        if (!$count) {
            $count = 0;
        }
    }
    return $count;
}
add_shortcode("ada_get_post_views", "ada_get_post_views");

Lo invocaremos como cualquier otro shortcode:

[ada_get_post_views]

Añadir el contador en el listado de posts

Para darle un poco más de complejidad a este sencillo plugin, en el listado de posts del backend mostraremos una columna con el contador de cada post.

Con el siguiente código, añadiremos la cabecera de columna:

function ada_post_views_column_head($columns) {
    $columns['views'] = __('Views', 'ada_post_views');
    return $columns;
}
add_filter('manage_posts_columns', 'ada_post_views_column_head');

Ahora añadremos el valor de la columna para cada fila:

function ada_post_views_column_value($column, $post_id) {
    $count_key = 'post_views_count_test';
    if ('views' === $column) {
        $count = get_post_meta($post_id, $count_key, true);
        if ($count === false or $count == '') {
            echo 0;
        } else {
            echo $count;
        }
    }
}
add_action('manage_posts_custom_column', 'ada_post_views_column_value', 10, 2);

Añadir el contador en la vista de edición de post

Daremos un paso más. Añadiremos esta información en la página de edición de un post con el siguiente código:

function ada_echo_post_views(){
    global $post;
    $count_key = 'post_views_count_test';
    $count = 0;

    if ( $post->post_type == 'post') {
        $count = get_post_meta($post->ID, $count_key, true);
        if (!$count) {
            $count = 0;
        }
    }
    echo $count;
}

function ada_post_views_admin_post() {
    if (is_admin() && get_post_type() == 'post') {
        add_meta_box('ada_post_views_value', __( 'Views', 'ada_post_views' ), 'ada_echo_post_views', 'post' );
    }
}
add_action('the_post', 'ada_post_views_admin_post');

Menú

Añadiremos una página con información sobre nuestro plugin al menú principal de administración de WordPress.

function ada_views__menu() {
	$the_info_path = plugin_dir_path(__FILE__).'admin/templates/info.php';	
	add_menu_page('Ada views counter', 'Ada views counter', 'manage_options', $the_info_path,'','dashicons-welcome-view-site');
}
add_action('admin_menu', 'ada_views__menu');

Traducción del plugin

Adicionalmente y como buena práctica, añadiremos la traducción a español de las cadenas que hemos utilizado.

function ada_translate() {
    load_plugin_textdomain('ada_post_views', false, dirname( plugin_basename( __FILE__ )).'/languages');
}
add_action( 'plugins_loaded', 'ada_translate' );

Estableceremos las traducciones de nuestros textos en los ficheros correspondientes dentro del directorio languages.

Descargar en GitHub

Este plugin está disponible para descargar en Github de forma gratuita: https://github.com/loiseupro/wordpress-adaviews-counter.

Leave a reply