Plugin WordPress control de las paginas que visitan los usuarios

¿Qué es Exportador Actividad Usuarios?

Este plugin es un sistema avanzado para monitorear y controlar las visitas de los usuarios en un sitio WordPress. Registra y gestiona la actividad de los usuarios desde el menú del usuario y desde la pagina de ajustes del plugin, permitiendo un seguimiento detallado de las páginas que visitan y cuándo lo hacen.

Características Principales del plugin para registrar las visitas de los usuarios

plugin actividad de usuarios.002
  • Registro de Actividad del Usuario, almacena las paginas que visita el usuario logeado.
  • Integración con el Menú de Usuarios y Ajustes de WordPress.
  • Creación de una Tabla Personalizada para almacenar datos.
  • Exportación de Datos de actividad de los usuarios.
  • Gestión del Historial de Actividad.

Funcionamiento de los Botones del menú de ajustes del plugin

plugin actividad de usuarios.004

Botón Exportar a CSV la actividad de Todos los usuarios a tu Ordenador

Este botón permite exportar el historial de actividad (paginas visitadas) de todos los usuarios logeados a un archivo CSV. Está disponible en el menú de ajustes en la zona de administración de WordPress.

Botón Guardar en CSV la actividad de Todos los usuarios en WordPress

Este botón permite exportar el historial de actividad (paginas visitadas) de todos los usuarios logeados a un archivo CSV en un directorio del WordPress. Está disponible en el menú de ajustes en la zona de administración de WordPress.

Botón Borrar Historial de todos los usuarios

Permite borrar el historial de actividad (paginas visitadas) de todos los usuarios logeados de la base de datos. Está disponible en el menú de ajustes en la zona de administración de WordPress.

Funcionamiento de los Botones del menú de ajustes del usuario

plugin actividad de usuarios.003

Botón Exportar a CSV

Este botón permite exportar el historial de actividad (paginas visitadas) de un usuario específico a un archivo CSV. Está disponible en el perfil de cada usuario en la zona de administración de WordPress.

Botón Borrar Historial

Permite borrar el historial de actividad (paginas visitadas) de un usuario específico de la base de datos. Este botón también se encuentra en el perfil de cada usuario en la zona de administración.

¿Cómo se Utiliza el plugin?

Después de la instalación y activación, el plugin comienza a registrar automáticamente las paginas que visitan los usuarios que han realizado login. La exportación y el borrado de datos se gestionan a través del perfil de usuario y la página de configuración del plugin.

Ventajas y Beneficios

El plugin es esencial y se presenta como una herramienta invaluable para garantizar el cumplimiento de la Regulación General de Protección de Datos (RGPD). (Recomiendo hablar con un experto legal).

La RGPD es un ordenamiento legal que protege los derechos y libertades de los individuos al regular la forma en que las entidades manejan y procesan sus datos personales. Dado que el incumplimiento de la RGPD puede resultar en sanciones financieras significativas, este plugin puede resultar esencial para cualquier negocio o individuo que maneje datos personales en la Unión Europea.

Además de las características de seguridad, el plugin también ofrece mejoras en el análisis de datos. Proporciona una visión detallada del comportamiento del usuario, lo cual es invaluable para tomar decisiones basadas en datos. Al analizar los patrones de comportamiento de los usuarios, una empresa puede identificar tendencias, mejorar su producto o servicio y, en última instancia, aumentar sus ingresos.

Este análisis de datos también puede ayudar a detectar cualquier actividad sospechosa, lo que puede ser crucial para prevenir el robo de datos.

El plugin también ofrece una funcionalidad de acreditación de acceso para certificar una compra.

Por último, pero ciertamente no menos importante, este plugin está diseñado para ser fácil de usar. Tiene una interfaz de usuario intuitiva y fácil de navegar, lo que permite a los usuarios configurar y gestionar su seguridad y privacidad de datos de manera eficiente.

Importancia en Temas Legales y de Seguridad en Europa

Este plugin es una herramienta valiosa para la administración de datos de usuarios de acuerdo con las leyes de privacidad de la UE, asegurando transparencia y seguridad en el manejo de datos. (Recomiendo hablar con un experto legal).

Código PHP del plugin Exportador Actividad Usuarios

<?php
/*
 * Plugin Name:     Exportador Actividad Usuarios
 * Plugin URI:      https://webyblog.es
 * Description:     Sistema para controlar las visitas de los usuarios, con control de las mismas desde el menú de los usuarios y desde el menu de ajustes del WordPress.
 * Version:         06-01-2024
 * Author:          Juan Luis Martel
 * Author URI:      https://webyblog.es
 * Text Domain:     0-exporta-actividad-usuario
*/

// Exit if accessed directly.
if( ! defined( 'ABSPATH' ) ) {
    exit;
}


// Función para crear un enlace a un documento de ayuda.html
function jlmr_mensaje_ayuda_exportar_actividad_usuario( $links_array, $plugin_file_name, $plugin_data, $status ) {
    if ( strpos( $plugin_file_name, basename(__FILE__) ) ) {
        // Construye la URL del archivo de ayuda
        $ayuda_url = plugins_url( 'ayuda.html', __FILE__ );

        // Añade el enlace de 'Ayuda' al final de la lista de enlaces
        $links_array[] = '<a rel="noopener noreferrer nofollow" href="' . esc_url( $ayuda_url ) . '" target="_blank">Ayuda</a>';
    }
    return $links_array;
}
add_filter( 'plugin_row_meta', 'jlmr_mensaje_ayuda_exportar_actividad_usuario', 10, 4 );




// Función para encolar el script de las visitas.
function jlmr_enqueue_scripts() {
    wp_enqueue_script('jlmr-ajax-visit', plugin_dir_url(__FILE__) . 'js/visit-tracker.js', array('jquery'), null, true);
    wp_localize_script('jlmr-ajax-visit', 'jlmrAjax', array(
        'ajaxurl' => admin_url('admin-ajax.php'),
        'nonce' => wp_create_nonce('jlmr_nonce'),
        'post_id' => get_the_ID()
    ));
}
add_action('wp_enqueue_scripts', 'jlmr_enqueue_scripts');


// Función para crear una tabla en la base de datos de WordPress "users_visitas".
register_activation_hook( __FILE__, 'jlmr_agregar_tabla' );
function jlmr_agregar_tabla(){
    global $wpdb;
    $table_name = $wpdb->prefix . "users_visitas";
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
                id bigint(20) NOT NULL AUTO_INCREMENT,
                user_id bigint(20) NOT NULL,
                post_id bigint(20) NOT NULL,
                fecha_visita datetime NOT NULL,
                PRIMARY KEY  (id)
                ) $charset_collate;";
    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );
}


// Función para manejar una petición AJAX en WordPress y registrar la visita de un usuario a un post en una tabla.
function jlmr_handle_ajax_visit() {
    check_ajax_referer('jlmr_nonce', 'nonce');
    global $wpdb;
    $user_id = get_current_user_id();
    $post_id = isset($_POST['post_id']) ? intval($_POST['post_id']) : 0;
    if ($user_id && $post_id) {
        $fecha_visita = current_time('mysql');
        $table_name = $wpdb->prefix . "users_visitas";
        $wpdb->insert(
            $table_name,
            array('user_id' => $user_id, 'post_id' => $post_id, 'fecha_visita' => $fecha_visita),
            array('%d', '%d', '%s')
        );
    }
    wp_die();
}
add_action('wp_ajax_jlmr_registrar_visita', 'jlmr_handle_ajax_visit'); 


/**
 * Función para borrar el historial de un usuario específico en la tabla "users_visitas".
 */
function jlmr_borrar_historial_usuario() {
    // Registro inicial para depuración.
    if (WP_DEBUG_LOG) {
        error_log('Función jlmr_borrar_historial_usuario iniciada');
    }

    // Comprobamos si la acción correcta está establecida y si el usuario actual tiene permisos de administrador.
    if (isset($_GET['action']) && $_GET['action'] == 'jlmr_borrar_historial' && current_user_can('manage_options')) {
        
        // Registro de depuración para verificar la acción y los permisos.
        if (WP_DEBUG_LOG) {
            error_log('Acción jlmr_borrar_historial y permisos de administrador confirmados');
        }

        // Verificamos el nonce para proteger contra CSRF (falsificación de solicitud en sitios cruzados).
      check_admin_referer('jlmr_borrar_historial'); 
        
        // Registro de depuración después de la verificación del nonce
		if (WP_DEBUG_LOG) {
		    error_log('Verificación del nonce pasada.');
		}
				
        // Hacemos global el objeto $wpdb para realizar operaciones en la base de datos.
        global $wpdb;

        // Obtenemos el ID del usuario de la URL y nos aseguramos de que sea un número entero.
        $user_id = isset($_GET['user_id']) ? intval($_GET['user_id']) : 0;

        // Registro en el log para depuración.
        if (WP_DEBUG_LOG) {
            error_log('Intentando borrar el historial del usuario con ID: ' . $user_id);
        }

        // Si el ID del usuario es válido, procedemos con el borrado.
        if ($user_id) {
            // Definimos el nombre de la tabla donde se realizará la eliminación.
            $table_name = $wpdb->prefix . "users_visitas";

            // Registro de depuración antes de intentar borrar.
            if (WP_DEBUG_LOG) {
                error_log('Preparando para borrar el historial en la tabla ' . $table_name);
            }

            // Realizamos la operación de borrado en la base de datos.
            $result = $wpdb->delete($table_name, array('user_id' => $user_id), array('%d'));

            // Registro en el log el resultado de la operación de borrado.
            if (false === $result) {
                error_log("Error al borrar historial.");
            } else {
                error_log("Historial borrado correctamente. Filas afectadas: $result");
            }

            // Redirigimos al usuario a la página de edición del usuario después de realizar la acción.
            wp_redirect(admin_url('user-edit.php?user_id=' . $user_id . '&historial_borrado=true'));
            exit;
        } else {
            // Registro en caso de que el user_id no sea válido.
            if (WP_DEBUG_LOG) {
                error_log('ID de usuario no válido o no proporcionado.');
            }
        }
    } else {
        // Registro en caso de que la acción no sea la correcta o el usuario no tenga permisos.
        if (WP_DEBUG_LOG) {
            error_log('Acción no establecida o permisos de usuario insuficientes.');
        }
    }
}

// Enganchamos la función al gancho 'admin_post_jlmr_borrar_historial' para que se ejecute cuando se llame a esta acción.
add_action('admin_post_jlmr_borrar_historial', 'jlmr_borrar_historial_usuario');


// Añade dos botones: uno de exportar CSV y otro de borrar el historial en el perfil del usuario en la zona de admin de WordPress
add_action('show_user_profile', 'jlmr_boton_exportar_visitas');
add_action('edit_user_profile', 'jlmr_boton_exportar_visitas');

function jlmr_boton_exportar_visitas($profileuser) {
    if (current_user_can('manage_options')) {

        // Código para la URL del boton exportar la actividad de un usuario determinado
        $url = add_query_arg([
            'action'      => 'jlmr_export_csv',
            'user_id'     => $profileuser->ID,
            'user_email'  => rawurlencode($profileuser->user_email),
            'first_name'  => rawurlencode($profileuser->first_name),
            'last_name'   => rawurlencode($profileuser->last_name),
            'nonce'       => wp_create_nonce('jlmr_export_csv')
        ], admin_url());

        // URL para el botón de borrar historial de las visitas de un usuario determinado
        $url_borrar = add_query_arg([
            'action'      => 'jlmr_borrar_historial',
            'user_id'     => $profileuser->ID,
            '_wpnonce'       => wp_create_nonce('jlmr_borrar_historial')
        ], admin_url('admin-post.php'));

        ?>
        <div class="plugin-exportar-actividad-usuario" id="plugin-exportar-actividad-usuario">
            <h3>Mantenimiento de paginas vistas por el Usuario (Plugin Exportar Actividad Usuarios)</h3>
            <table class="form-table">
                <tr>
                    <th><label for="user-activity">Exportar a CSV</label></th>
                    <td><a href="<?php echo esc_attr($url); ?>" class="button"><?php esc_html_e('Exportar Historial de Horas', 'user-activity-export'); ?></a></td>
                </tr>
                <tr>
                    <th><label for="borrar-historial">Borrar Historial</label></th>
                    <td>
                        <a href="<?php echo esc_url($url_borrar); ?>" class="button"><?php esc_html_e('Borrar Historial', 'user-activity-export'); ?></a>
                    </td>
                </tr>
            </table>
        </div>
        <?php
    }
}


// Función que crea el CSV con las visitas de un usuario desde la pagina de administracion del usuario.
add_action( 'admin_init', 'jlmr_export' );

function jlmr_export(){
    global $wpdb;

    if( current_user_can( 'manage_options' ) &&
        isset( $_GET['action'] ) &&
        isset( $_GET['user_id'] ) &&
        isset( $_GET['nonce'] ) &&
        isset( $_GET['user_email'] ) &&
        ( $_GET['action'] == 'jlmr_export_csv' ) &&
        wp_verify_nonce( $_GET['nonce'], 'jlmr_export_csv' )
    ){

        $user_id = intval( $_GET['user_id'] );
        $user_email = rawurldecode( $_GET['user_email'] );
        $first_name = rawurldecode( $_GET['first_name'] );
        $last_name = rawurldecode( $_GET['last_name'] );

        $file_name = 'datos_usuario_' . $user_id . '.csv';
        $header_row = [
            'Email',
            'Nombre',
            'Apellidos',
            'Tipo',
            'Título de la Pagina Visitada',
            'Fecha y Hora'
        ];

        $users_activity = $wpdb->get_results(
            $wpdb->prepare("
                SELECT *
                FROM {$wpdb->prefix}users_visitas
                WHERE user_id = %d
                ORDER BY fecha_visita DESC
            ", $user_id)
        );

        date_default_timezone_set('Atlantic/Canary');

        header('Content-Encoding: UTF-8');
        header("Content-type: text/csv; charset=UTF-8");
        header( "Content-Disposition: attachment; filename={$file_name}" );
        header('Pragma: no-cache');
        header('Expires: 0');

        $fh = @fopen( 'php://output', 'w' );

        fputcsv( $fh, $header_row );
        foreach ($users_activity as $user_activity){

            $post_type = get_post_type( $user_activity->post_id );
            $tipo = ucwords(str_replace('_', ' ', $post_type));

            $row = [
                $user_email,
                $first_name,
                $last_name,
                $tipo,
                get_the_title( $user_activity->post_id ),
                date( 'd/m/Y H:i:s', strtotime($user_activity->fecha_visita) ) // Convertir datetime a formato legible
            ];
            fputcsv( $fh, $row );
        }

        fclose($fh);
        exit();
    }
}


// Añadir menú de ajustes del plugin en el panel de administración del WordPress
add_action('admin_menu', 'jlmr_agregar_menu_configuracion');
function jlmr_agregar_menu_configuracion() {
    add_options_page(
        'Configuración Exportador Actividad Usuarios', // Título de la página
        'Exportador Actividad Usuarios', // Título del menú
        'manage_options', // Capacidad requerida
        'exportador-actividad-usuarios-config', // Slug del menú
        'jlmr_renderizar_pagina_configuracion' // Función para renderizar la página
    );
}


// Función de renderizado de la pagina de administracion del plugin 

function jlmr_renderizar_pagina_configuracion() {
    ?>
    <div class="wrap">
        <h2>Configuración Exportador Actividad Usuarios - (Plugin Exportar Actividad Usuarios)</h2>
        <form method="post">
            <input type="hidden" name="action" value="export_all_users_activity">
            <?php submit_button('Exportar Actividad de Todos los Usuarios a tu Ordenador'); ?>
        </form>
        <form method="post">
            <input type="hidden" name="action" value="export_store_all_users_activity">
            <?php submit_button('Guardar Actividad de Todos los Usuarios en CSV en el WordPress'); ?>
        </form>
        <form method="post">
            <input type="hidden" name="action" value="delete_all_users_activity">
            <?php submit_button('Borrar Actividad de Todos los Usuarios de la Base de Datos', 'delete'); ?>
        </form>
    </div>
    <?php
}
add_action('admin_menu', 'jlmr_agregar_menu_configuracion');


// Función para la acción de exportación y almacenamiento de todos los usuarios en un CSV dentro de un directorio de WordPress
add_action('admin_init', 'jlmr_exportar_y_almacenar_actividad_todos_usuarios');
function jlmr_exportar_y_almacenar_actividad_todos_usuarios() {
    if (isset($_POST['action']) && $_POST['action'] == 'export_store_all_users_activity') {
        if (!current_user_can('manage_options')) {
            return;
        }

        global $wpdb;
        $upload_dir = wp_upload_dir();
        $csv_dir = trailingslashit($upload_dir['basedir']) . 'csv-actividad-usuarios/';

        // Crear el directorio en WordPress si no existe
        if (!file_exists($csv_dir)) {
            wp_mkdir_p($csv_dir);
        }

        $file_name = 'actividad_todos_usuarios_' . date('Y-m-d') . '.csv';
        $file_path = $csv_dir . $file_name;
        $header_row = ['Email', 'Nombre', 'Apellidos', 'Tipo', 'Título de la Página Visitada', 'Fecha y Hora'];
        $users_activity = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}users_visitas ORDER BY fecha_visita DESC");

        $fh = fopen($file_path, 'w');
        fputcsv($fh, $header_row);

        foreach ($users_activity as $user_activity) {
            $user_info = get_userdata($user_activity->user_id);
            $post_type = get_post_type($user_activity->post_id);
            $tipo = ucwords(str_replace('_', ' ', $post_type));

            $row = [
                $user_info->user_email,
                $user_info->first_name,
                $user_info->last_name,
                $tipo,
                get_the_title($user_activity->post_id),
                date('d/m/Y H:i:s', strtotime($user_activity->fecha_visita))
            ];
            fputcsv($fh, $row);
        }

        fclose($fh);

        // Muestra mensaje de éxito despues de guardar la actividad de todos los usuarios en el directorio del WordPress
        add_action('admin_notices', function() use ($file_path) {
            echo "<div class='notice notice-success is-dismissible'><p>Actividad de todos los usuarios guardada en CSV: {$file_path}</p></div>";
        });
    }
}


// Función para borrar la actividad de todos los usuarios de la base de datos
function jlmr_borrar_actividad_todos_usuarios() {
    if (isset($_POST['action']) && $_POST['action'] == 'delete_all_users_activity') {
        if (!current_user_can('manage_options')) {
            return;
        }

        global $wpdb;
        $table_name = $wpdb->prefix . "users_visitas";

        // Borrar todos los registros de la tabla
        $wpdb->query("DELETE FROM $table_name");

        // Redirigir con un parámetro que indica éxito en el borrado
        wp_redirect(admin_url('options-general.php?page=exportador-actividad-usuarios-config&borrado=true'));
        exit;
    }
}
add_action('admin_init', 'jlmr_borrar_actividad_todos_usuarios');


// Función para mostrar aviso de borrado correcto de la actividad de todos los usuarios desde la base de datos
function jlmr_mostrar_notificacion_borrado() {
    if (isset($_GET['borrado']) && $_GET['borrado'] == 'true') {
        ?>
        <div class="notice notice-success is-dismissible">
            <p><?php _e('La actividad de todos los usuarios ha sido borrada con éxito.', 'exportador-actividad-usuarios'); ?></p>
        </div>
        <?php
    }
}
add_action('admin_notices', 'jlmr_mostrar_notificacion_borrado');


// Función para manejar la solicitud de exportación de las visitas de todos los usuarios
add_action('admin_init', 'jlmr_exportar_actividad_todos_usuarios');
function jlmr_exportar_actividad_todos_usuarios() {
    if (isset($_POST['action']) && $_POST['action'] == 'export_all_users_activity') {
        if (!current_user_can('manage_options')) {
            return;
        }

        global $wpdb;

        // Preparar el nombre del archivo CSV
        $file_name = 'actividad_todos_usuarios_' . date('Y-m-d') . '.csv';
        $header_row = ['Email', 'Nombre', 'Apellidos', 'Tipo', 'Título de la Página Visitada', 'Fecha y Hora'];

        // Obtener la actividad de todos los usuarios
        $users_activity = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}users_visitas ORDER BY fecha_visita DESC");

        // Configurar cabeceras para descarga del CSV
        header('Content-Encoding: UTF-8');
        header("Content-type: text/csv; charset=UTF-8");
        header("Content-Disposition: attachment; filename={$file_name}");
        header('Pragma: no-cache');
        header('Expires: 0');

        $fh = @fopen('php://output', 'w');

        // Escribir la fila de encabezado
        fputcsv($fh, $header_row);

        // Escribir los datos de cada usuario
        foreach ($users_activity as $user_activity) {
            $user_info = get_userdata($user_activity->user_id);
            $post_type = get_post_type($user_activity->post_id);
            $tipo = ucwords(str_replace('_', ' ', $post_type));

            $row = [
                $user_info->user_email,
                $user_info->first_name,
                $user_info->last_name,
                $tipo,
                get_the_title($user_activity->post_id),
                date('d/m/Y H:i:s', strtotime($user_activity->fecha_visita))
            ];
            fputcsv($fh, $row);
        }

        fclose($fh);
        exit();
    }
}


?>

Código Js del plugin Exportador Actividad Usuarios

jQuery(document).ready(function($) {
    $.ajax({
        url: jlmrAjax.ajaxurl,
        type: 'POST',
        data: {
            action: 'jlmr_registrar_visita',
            nonce: jlmrAjax.nonce,
            post_id: jlmrAjax.post_id
        }
    });
});

Descargar Plugin Exportador Actividad Usuarios

Si quieres puedes descargar el plugin desde este enlace:


Foto de Perfil de Juan Luis Martel

Juan Luis Martel.

Profesional en Tecnologías Integradas - Desarrollo Web y Electrónica.

Las Palmas de Gran Canaria, España

Soy un apasionado de la programación con experiencia en Wordpress, PHP, PIC, Microcontroladores y ASM. Además, soy Técnico Especialista en Electrónica y también tengo experiencia como profesor en este campo. Mi pasión por la electrónica me ha llevado a combinar mis habilidades en programación con mi conocimiento técnico, lo que me permite crear soluciones innovadoras y eficientes en mis proyectos de paginas webs y de electrónica.

¡No te vayas sin valorar el contenido!

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 5 / 5. Recuento de votos: 1

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Ya que has encontrado útil el contenido...

🙏 Ayúdame y compártelo en tus redes sociales ¡Significa mucho para mí! - Gracias

¡Siento que el contenido no te haya sido útil o gustado! 😔

¡Déjame mejorar este contenido!

Dime, ¿cómo crees que puedo mejorar este contenido? 🙏 ¡Significa mucho para mí! - Gracias

Deja un comentario