Hace un tiempo, un cliente me pidió que le desarrollara un sistema de gestión de descargas en el front-end de WordPress. Quería algo funcional, pero con una jerarquía de permisos clara para usuarios anónimos, registrados y administradores. Hice el trabajo exactamente como lo pidió, pero lo interesante es que, con el tiempo, he visto cómo otros usuarios han ido implementando el sistema en sus proyectos. Por eso, decidí compartirlo y añadirle mejoras poco a poco.

¿Qué hace este sistema?
El sistema está pensado para dar a cada tipo de usuario las herramientas que necesita, pero sin que puedan hacer de más. Todo está controlado según el rol de cada uno:
1. Administradores
- Pueden hacer absolutamente todo:
- Subir y eliminar archivos.
- Crear y borrar carpetas.
- Eliminar registros individuales del historial.
- Borrar todo el historial con un botón.
2. Usuarios registrados
- Tienen acceso limitado, pero suficiente:
- Pueden subir archivos y guardarlos en carpetas ya creadas o crear una nueva.
- Pueden eliminar archivos que hayan subido o de otros usuarios.
- No pueden eliminar carpetas ni borrar el historial, solo verlo.
3. Usuarios anónimos
- Los que menos pueden hacer:
- Solo tienen permiso para subir archivos.
- No pueden eliminar archivos, carpetas ni registros. Solo pueden participar subiendo contenido y viendo los registros.
Evidentemente el proposito de este sistema es la descarga global de archivos entre usuarios por lo que todo el mundo puede descargar todo, sin limites.
¿Por qué está hecho así?
La verdad, el cliente nunca me dijo el motivo exacto de esta configuración, pero creo que el objetivo era que todo estuviera controlado por los administradores. Los usuarios registrados pueden colaborar subiendo y organizando archivos, pero sin descontrolar nada. Y los anónimos tienen un papel testimonial: pueden subir y descargar algo, pero hasta ahí llegan.
Este tipo de sistema tiene sentido si quieres que haya colaboración, pero con límites claros para evitar líos.

La nueva mejora: el historial de cambios
Cuando compartí este código, vi que había margen para añadir funciones extra, y la primera gran mejora fue implementar un historial de cambios. Esta función es una maravilla porque te deja rastrear todo lo que pasa en el sistema.
¿Qué hace el historial?
- Registra todas las acciones importantes:
- Quién subió o eliminó un archivo y en qué carpeta.
- Si la acción la hizo un administrador, un usuario registrado o un anónimo.
- Muestra un listado claro:
- Incluye la acción, el archivo o carpeta afectada, el usuario responsable y la fecha/hora.
- Herramientas para administradores:
- Pueden borrar avisos individuales del historial.
- Si lo necesitan, pueden borrar todo el historial de un golpe.

¿Cómo está hecho?
El historial funciona gracias a un par de detalles técnicos que te resumo:
1. Registro de acciones
Cada vez que alguien sube o elimina un archivo, se guarda un registro en una tabla personalizada de la base de datos llamada wp_file_history. Ahí se almacenan datos como:
- El ID del usuario (o un 0 si es anónimo).
- La acción realizada (subida o eliminación).
- El nombre del archivo o carpeta afectada.
- La fecha y hora de la acción.
2. Visualización del historial
Usamos un shortcode para mostrar el historial en el front-end. Los registros aparecen en un listado con:
- Un botón para eliminar avisos individuales (solo visible para administradores).
- Un botón para borrar todo el historial (también solo para administradores).
Una buena estructura para la página podría ser:
- Título de la página: Algo como «Zona de descargas» o «Gestión de archivos».
- Descripción breve: Un párrafo explicando qué pueden hacer los usuarios.
- Shortcode del formulario:
[file_upload_form_v2](Formulario de gestión de archivos). - Shortcode del historial:
[file_change_history](Registros de acciones).
3. Seguridad
Todo está pensado para que nadie haga más de lo que debe:
- Los permisos de WordPress (
current_user_can) controlan quién puede ver o eliminar qué. - Los «nonces» aseguran que las solicitudes al servidor sean legítimas.
¿Qué ventajas tiene este historial?
Con el historial, todo está mucho más claro. Ya no hay dudas sobre quién hizo qué. Por ejemplo:
- Si alguien sube un archivo importante, sabes quién fue y cuándo.
- Si un administrador elimina algo, queda registrado.
- Incluso puedes saber cuándo alguien sube algo de manera anónima.
Esto no solo mejora la transparencia, sino que también te da más control sobre el sistema.
Este sistema empezó como algo básico para gestionar descargas, pero con mejoras como el historial de cambios, se ha convertido en una herramienta muy potente. Es una gran solución si quieres permitir que los usuarios colaboren sin perder el control de lo que ocurre en tu sitio.
El siguiente código tienes que agregarlo en el functions.php de tu tema hijo o utilizar un plugin como CODE SNIPPETS. También puedes crear tu propio plugin con unos simples pasos.
Este código funciona junto al original. Si ya usas el original y quieres implementar esta mejora, agrega este código en un snippet diferente para tenerlo todo bien organizado y estructurado.
🔐 Este contenido es solo para suscriptores premium.
Estos códigos de la zona premium se mantienen regularmente. Si usas un código y no te funciona correctamente, puedes abrir un ticket de soporte explicando los detalles y lo vemos.



¿Qué te parece esta mejora?