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.
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:
Índice de contenidos
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.
¿Que prefieres tenerlo ya hecho?
Puedes descargarlo en GitHub o de aquí mismo…
[download id=»80995″]
Visto en SitePoint
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!
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).
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?
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.
Es las veces que hace login. Si quieres puedes forzar la desconexión mediante otro plugin, este por ejemplo: https://wordpress.org/plugins/wp-idle-logout/