Contador de visitas en 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
- [re-directory]admin
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.