Estadísticas de acceso por usuario WordPress

Normalmente uno no necesita controlar cuántas veces acceden sus usuarios, pero en entornos editoriales, tiendas online y blogs corporativos todo seguimiento es poco, así que vamos a ver cómo conocer las estadísticas de acceso de los usuarios de un sitio WordPress, bastante fácil dicho sea de paso.

rompiendo reloj de fichar

De hecho, solo tenemos que añadir unas líneas de código a nuestro plugin de utilidades, o sino también podemos crear un plugin solo para eso.

Las líneas a incluir serían las siguientes:

namespace Sitepoint\WordPressPlugin;
class Login_Counter {
	public function init() {
		add_action( 'wp_login', array( $this, 'count_user_login' ), 10, 2 );
		add_filter( 'manage_users_columns', array( $this, 'add_stats_columns' ) );
		add_filter( 'manage_users_custom_column', array( $this, 'fill_stats_columns' ), 10, 3 );
	}

	/**
	 * Guarda los accesos de usuario en la base de datos.
	 *
	 * @param string $user_login username
	 * @param object $user WP_User object
	 */
	public function count_user_login( $user_login, $user ) {
		$count = get_user_meta( $user->ID, 'sp_login_count', true );
		if ( ! empty( $count ) ) {
			$login_count = get_user_meta( $user->ID, 'sp_login_count', true );
			update_user_meta( $user->ID, 'sp_login_count', ( (int) $login_count + 1 ) );
		}
		else {
			update_user_meta( $user->ID, 'sp_login_count', 1 );
		}
	}

	/**
	 * Añade la columna de estadísticas al listado de usuarios en WordPress
	 *
	 * @param string $columns
	 *
	 * @return mixed
	 */
	public function add_stats_columns( $columns ) {
		$columns['login_stat'] = __( 'Accesos' );

		return $columns;
	}


	/**
	 * Rellena la columna de estadísticas con los valores.
	 *
	 * @param string $empty
	 * @param string $column_name
	 * @param int $user_id
	 *
	 * @return string|void
	 */
	public function fill_stats_columns( $empty, $column_name, $user_id ) {
		if ( 'login_stat' == $column_name ) {
			if ( get_user_meta( $user_id, 'sp_login_count', true ) !== '' ) {
				$login_count = get_user_meta( $user_id, 'sp_login_count', true );
				return "<strong>$login_count</strong>";
			}
			else {
				return __( 'No record found.' );
			}
		}
		return $empty;
	}

	/**
	 * Singleton class instance
	 * @return Login_Counter
	 */
	public static function get_instance() {
		static $instance;
		if ( ! isset( $instance ) ) {
			$instance = new self();
			$instance->init();
		}
		return $instance;
	}
}
Login_Counter::get_instance();

Por si quieres echarle un tiento a lo que hace cada parte … vayamos por partes:

1. Metemos los filtros y ganchos necesarios

public function init() {
		add_action( 'wp_login', array( $this, 'count_user_login' ), 10, 2 );
		add_filter( 'manage_users_columns', array( $this, 'add_stats_columns' ) );
		add_filter( 'manage_users_custom_column', array( $this, 'fill_stats_columns' ), 10, 3 );
	}

2. Creamos una tabla en la base de datos, donde guardamos los accesos de usuario

public function count_user_login( $user_login, $user ) {

		if ( ! empty( get_user_meta( $user->ID, 'sp_login_count', true ) ) ) {
			$login_count = get_user_meta( $user->ID, 'sp_login_count', true );
			update_user_meta( $user->ID, 'sp_login_count', ( (int) $login_count + 1 ) );
		} else {
			update_user_meta( $user->ID, 'sp_login_count', 1 );
		}
	}

3. Añadimos la columna que mostrará los accesos de cada usuario en el listado de usuarios de WordPress

public function add_stats_columns( $columns ) {
		$columns['login_stat'] = __( 'Accesos' );

		return $columns;
	}

4. Mostramos en la columna los accesos de cada usuario

public function fill_stats_columns( $empty, $column_name, $user_id ) {
		if ( 'login_stat' == $column_name ) {
			if ( get_user_meta( $user_id, 'sp_login_count', true ) !== '' ) {
				$login_count = get_user_meta( $user_id, 'sp_login_count', true );
				return "<strong>$login_count</strong>";
			}
			else {
				return __( 'No record found.' );
			}
		}
		return $empty;
	}

5. Cerramos y hacemos que todo funcione

public static function get_instance() {
		static $instance;
		if ( ! isset( $instance ) ) {
			$instance = new self();
			$instance->init();
		}

		return $instance;
	}
}

Login_Counter::get_instance();

Si lo prefieres, como apuntaba antes, puedes crear un plugin con todo el código, sería algo así:

<?php

/*
Plugin Name: Contador de accesos del usuario a WordPress
Plugin URI: http://sitepoint.com
Description: Cuenta el número de veces que los usuarios acceden a su cuenta WordPress.
Version: 1.0
Author: Agbonghama Collins
Author URI: http://w3guy.com
License: GPL2
*/

namespace Sitepoint\WordPressPlugin;
class Login_Counter {
	public function init() {
		add_action( 'wp_login', array( $this, 'count_user_login' ), 10, 2 );
		add_filter( 'manage_users_columns', array( $this, 'add_stats_columns' ) );
		add_filter( 'manage_users_custom_column', array( $this, 'fill_stats_columns' ), 10, 3 );
	}


/**
* Guarda los accesos de usuario en la base de datos.
*
* @param string $user_login username
* @param object $user WP_User object
*/

public function count_user_login( $user_login, $user ) { $count = get_user_meta( $user->ID, 'sp_login_count', true );
		if ( ! empty( $count ) ) {
			$login_count = get_user_meta( $user->ID, 'sp_login_count', true );
			update_user_meta( $user->ID, 'sp_login_count', ( (int) $login_count + 1 ) );
		}
		else {
			update_user_meta( $user->ID, 'sp_login_count', 1 );
		}
	}

	/**
	 * Añade la columna de estadísticas al listado de usuarios en WordPress
	 *
	 * @param string $columns
	 *
	 * @return mixed
	 */
	public function add_stats_columns( $columns ) {
		$columns['login_stat'] = __( 'Accesos' );

		return $columns;
	}

	/**
	 * Rellena la columna de estadísticas con los valores.
	 *
	 * @param string $empty
	 * @param string $column_name
	 * @param int $user_id
	 *
	 * @return string|void
	 */
	public function fill_stats_columns( $empty, $column_name, $user_id ) {
		if ( 'login_stat' == $column_name ) {
			if ( get_user_meta( $user_id, 'sp_login_count', true ) !== '' ) {
				$login_count = get_user_meta( $user_id, 'sp_login_count', true );
				return "<strong>$login_count</strong>";
			}
			else {
				return __( 'No record found.' );
			}
		}
		return $empty;
	}

	/**
	 * Singleton class instance
	 * @return Login_Counter
	 */
	public static function get_instance() {
		static $instance;
		if ( ! isset( $instance ) ) {
			$instance = new self();
			$instance->init();
		}
		return $instance;
	}
}
Login_Counter::get_instance();

Lo guardas en una carpeta con el nombre que quieras (sin espacios por favor), lo comprimes en ZIP y lo instalas desde WordPress a la manera habitual: Plugins -> Añadir nuevo -> Subir plugin.

contador acceso usuarios

¿Que prefieres tenerlo ya hecho?

Puedes descargarlo en GitHub o de aquí mismo…

[download id=»80995″]

Visto en SitePoint

VALORA Y COMPARTE ESTE ARTÍCULO PARA MEJORAR LA CALIDAD DEL BLOG…
(6 votos, promedio: 5)

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

AVISO: Esta publicación es de hace 3 años o más. Si es un código o un plugin podría no funcionar en las últimas versiones de WordPress, y si es una noticia podría estar ya obsoleta. Luego no digas que no te hemos avisado.

4 comentarios en “Estadísticas de acceso por usuario WordPress”

  1. Fernando Puente

    Gran utilidad para controlar un poco más un WordPress muli-editor o multi-periodista.
    La base del plugin es muy buena para hacerla crecer:
    – Guardar dispositivo habitual de login
    – IP´s o zona geográfica por estadísticas
    – Mandar e-mail si no se han logado en X días, …

    Voy a ver si puedo probarlo en algún entorno porque me queda la duda del control de sesión que hace WordPress con la cookie del navegador cuando decimos que nos recuerde, y no se si llama al «wp_login» en esos casos o hay que cruzarlo con el «login_form» (sólo por curiosidad).

  2. Fantástico dato Fernando!; mi pregunta o duda es, si yo tengo en mi página web un pluggin que me genera códigos de descuentos, ¿Es posible que yo pueda controlar esos códigos de descuentos para saber a que usuario pertenece?

  3. Interesante, pero dime algo, el plug mide las veces que un usuario ha hecho login, no las veces que ha accesido. Es decir si un user hace login y deja la sesion abierta, no estaria contabilizando las veces que accede.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

Ir arriba Ir al contenido