Releases: LuisABB/EmailLiteWordpress
Releases · LuisABB/EmailLiteWordpress
Release list
Categorias para email
✨ Nuevas funcionalidades principales
- Sistema de Categorías de Suscriptores:
- Nueva tabla
wp_wec_categoriespara gestionar categorías personalizadas - Nueva tabla
wp_wec_subscriber_categoriespara relación many-to-many - Gestor completo
WEC_Category_Managercon patrón Singleton - Interfaz de administración para crear, editar y eliminar categorías
- Selector de color para identificación visual de categorías
- Asignación múltiple: un suscriptor puede pertenecer a varias categorías
- Nueva tabla
🔧 Mejoras en Módulo Limpieza de Emails
- Recolección no destructiva: La función "Recolectar Correos" ahora mantiene todos los emails existentes en
wp_wec_subscriberssin modificarlos ni eliminarlos - Solo inserción de nuevos: El sistema únicamente añade emails nuevos que no existan previamente en la base de datos
- Preservación de estados: Los emails existentes conservan su estado actual (
subscribed,disposable,invalid, etc.) sin ser alterados - Mensajes informativos mejorados:
- Muestra cantidad de emails nuevos añadidos
- Indica total anterior y total final después de la recolección
- Mensajes más claros y descriptivos en español
- Normalización a minúsculas: Prevención de duplicados mediante comparación case-insensitive
- Fuentes de recolección: Usuarios registrados de WordPress (
wp_users) y comentarios aprobados (wp_comments) - Estado inicial: Nuevos emails se añaden con estado vacío (
'') listos para validación posterior - Información de respuesta: AJAX devuelve datos detallados (
inserted,previous_total,final_total)
🎯 Segmentación en Campañas
- Envío de campañas por categorías:
- Sistema completamente refactorizado: ahora las campañas se envían por categorías en lugar de por correos individuales
- Selector interactivo de categorías en formulario de crear campaña
- Checkbox "Enviar a TODAS las categorías" que calcula automáticamente el total de destinatarios
- Selección múltiple de categorías específicas con contador en tiempo real
- Visualización de categorías con badges de colores en lista de campañas
- Columna
category_ids(JSON) en tablawp_wec_jobspara almacenar las categorías seleccionadas - Método
gather_emails_by_categories()para filtrado eficiente por categorías - Contador dinámico de destinatarios con validación visual (verde/amarillo)
- Deshabilitación automática de opciones cuando "todas" está seleccionado
🏗️ Categorías Predeterminadas
- Categorías iniciales automáticas:
- General (#95a5a6) - Suscriptores sin categoría específica
- Ofertas (#e74c3c) - Interesados en promociones
- Proveedores (#3498db) - Contactos B2B
📊 Funcionalidades de Gestión
- Panel de administración completo:
- Contador de suscriptores por categoría
- Edición inline de categorías existentes
- Protección de categoría "General" (no eliminable)
- Validación de slugs únicos
- Generación automática de slugs desde nombres
- Color picker integrado para personalización visual
🔧 Mejoras Técnicas
- Arquitectura modular:
- Clase
WEC_Category_Managerindependiente y reutilizable - Integración con
WEC_Campaign_Managermediante interfaces - Función
gather_emails_by_categories()para filtrado eficiente de destinatarios por categorías seleccionadas - Método
get_subscribers_by_categories()con JOIN optimizado para consultas rápidas - AJAX para operaciones asíncronas (guardar, eliminar, asignar)
- JavaScript dinámico para contador de destinatarios en tiempo real
- Método
get_job_categories_html()para renderizar badges de categorías en campañas - Sistema de fallback: si no hay categorías seleccionadas, usa escaneo completo (
gather_emails_full_scan())
- Clase
- Migración automática de suscriptores:
- Función
wec_migrate_subscribers_to_general()ejecutada al activar el plugin - Migra automáticamente todos los suscriptores con
status = 'subscribed'sin categoría a "General" - Bandera
wec_subscribers_migrated_to_generalpara evitar ejecuciones duplicadas - Logs detallados del proceso de migración para troubleshooting
- Función
- Asignación automática a "General":
- Correos recolectados con "Recolectar Correos" se asignan automáticamente a categoría "General"
- Inserción directa en tabla
wp_wec_subscriber_categoriesal crear nuevos suscriptores - Simplificación del contador de categorías: eliminadas subconsultas complejas con
NOT IN - Conteo directo desde
wp_wec_subscriber_categoriescon JOIN awp_wec_subscribers
🎨 Mejoras de UI/UX
- Interfaz visual mejorada:
- Badges de colores para categorías en lista de campañas
- Estadísticas en tiempo real de suscriptores por categoría en formulario de creación
- Formulario unificado para crear/editar categorías
- Confirmaciones y validaciones en tiempo real
- Estilos CSS inline optimizados
- Contador visual dinámico de destinatarios con colores según cantidad (0 = amarillo, >0 = verde)
- Efectos hover en opciones de categorías para mejor experiencia de usuario
- Deshabilitación visual (opacidad 0.5) de categorías cuando "todas" está seleccionado
- Mensajes de ayuda y enlaces directos para crear categorías si no existen
🔐 Seguridad
- Validación y sanitización:
- Nonces para todas las operaciones AJAX
- Sanitización de inputs de categorías
- Validación de permisos
manage_options - Escape de outputs HTML
- Validación de JSON en category_ids
📦 Compatibilidad
- Retrocompatibilidad total:
- Campañas sin categorías siguen funcionando (valor "all" por defecto)
- Migración automática de base de datos a versión 4
- Fallback a escaneo completo (
gather_emails_full_scan()) si no hay categorías o Category Manager no disponible - Sin breaking changes en API existente
- Campo
category_idsopcional en tablawp_wec_jobs(JSON) - Método
create_campaign_in_db()acepta parámetro opcional$category_idscon valor por defectoarray('all')
- Migración automática en instalación/actualización:
- Al activar el plugin, todos los suscriptores existentes con
status = 'subscribed'sin categoría se migran automáticamente a "General" - Proceso transparente sin intervención manual del usuario
- No afecta suscriptores que ya tienen categorías asignadas
- Ejecución única mediante bandera
wec_subscribers_migrated_to_general
- Al activar el plugin, todos los suscriptores existentes con
🐛 Correcciones
- Actualización de versión de plugin a 9.0.0
- Actualización de versión de base de datos a 4
- Creación automática de tablas de categorías en activación
- Eliminada lógica de borrado: Ya no se eliminan emails de la tabla de suscriptores durante la recolección
- Nombre de botón clarificado: "Validar TODOS" en realidad solo valida emails con
status = ''(pendientes/nuevos), no re-valida emails ya procesados
🎯 Comportamiento del Sistema de Limpieza
- "Recolectar Correos": Añade nuevos emails sin tocar existentes
- "Validar TODOS": Solo valida emails con estado vacío (no re-valida
subscribed,disposable, etc.) - Validación individual: Cada email puede ser validado manualmente mediante botón específico
- Protección de datos: Los emails existentes permanecen intactos durante todo el proceso
Update Campaing
✨ Cambios principales
- Expiración de campañas solo si son de días anteriores (CDMX):
- Ahora las campañas solo se marcan como expiradas si la fecha (en CDMX) es de un día anterior al actual, sin importar la hora programada.
- Se utiliza
DATE(CONVERT_TZ(...))en las consultas MySQL para comparar correctamente la fecha local de CDMX contra la fecha actual.
- Conversión robusta de zonas horarias:
- Todas las comparaciones de fechas y horas relevantes usan conversión explícita entre UTC y 'America/Mexico_City' para evitar expiraciones prematuras.
- Eliminación de logs de depuración:
- Se eliminaron todas las llamadas a
error_logy mensajes de depuración del código de producción para mayor limpieza y rendimiento.
- Se eliminaron todas las llamadas a
🐛 Correcciones
- Las campañas ya no expiran antes de tiempo por diferencias de hora entre UTC y CDMX.
- El código está libre de logs de depuración y listo para producción.
Limpieza Emails y Seguridad
✨ Nuevas funcionalidades y cambios
- Menú Limpieza Emails: El submenú "Limpieza Emails" ahora se registra correctamente en el panel de administración y muestra la interfaz de gestión de correos sin errores 404.
- Escaneo solo de suscriptores validados: El modo "Usar escaneo de todo el sitio" ahora solo toma emails de la tabla
wp_wec_subscribersdondestatus = 'subscribed'. Ya no se escanean usuarios ni comentarios. - Seguridad API KEY: La clave de la API de EmailListVerify se almacena cifrada en la base de datos y solo se descifra cuando es necesario.
- Mejoras de UI: Los botones de validación se desactivan si falta la API KEY y se añadió un botón para configurar o cambiar la clave en cualquier momento.
🐛 Correcciones
- El botón "Validar TODOS" ahora solo valida correos con status vacío.
🔒 Notas técnicas
- El registro del submenú y su callback se realiza desde el archivo principal para mayor robustez.
- Eliminada la lógica de escaneo de usuarios y comentarios en campañas masivas.
- Refactorización de hooks y AJAX para mayor claridad y seguridad.
Limpieza y optimización SMTP
🛠️ Mejoras principales
- Eliminación total de lógica SMTP propia: Se eliminó todo el código, UI y lógica de configuración SMTP y .env del plugin. Ahora el envío SMTP depende exclusivamente de WP Mail SMTP u otros plugins externos.
- Refactorización y limpieza: El código del gestor de plantillas y pruebas de envío fue optimizado, eliminando parámetros, hooks y métodos obsoletos. Solo permanece la gestión de plantillas y el formulario de prueba.
- Changelog actualizado: Documentación de la transición a dependencia exclusiva de WP Mail SMTP para el envío de correos.
🐛 Correcciones
- Corrección de conflictos SMTP con otros plugins.
- Reparación automática de índices únicos en la base de datos de suscriptores.
- Eliminados errores fatales por métodos huérfanos tras la limpieza de SMTP.
- Validación de sintaxis y funcionamiento tras la refactorización.
🔧 Notas técnicas
- Se refactorizó la inicialización de PHPMailer para sobrescribir cualquier otro handler SMTP.
- Se añadió función de reparación de índices (
wec_repair_subscribers_indexes) y verificación en la instalación/upgrade. - El plugin ya no contiene lógica SMTP propia ni dependencias de .env.
- El formulario de prueba solo permite seleccionar plantilla y destinatario.
Split file campaign
🔄 Arquitectura de Campañas
- Separación completa: Nueva clase
WEC_Campaign_Managerindependiente para gestión de campañas - Autoloader compatible: Carga automática del manager de campañas sin cambios en estructura existente
- Patrón arquitectónico consistente: Siguiendo el mismo diseño de SMTP y Template managers
- Interfaces desacopladas: Sistema de interfaces para comunicación entre managers
🎯 Funcionalidades Migradas
- Creación y edición de campañas completa
- Procesamiento de cola y envíos masivos
- Gestión de destinatarios (escaneo + manual)
- Cron interno y externo con validación de seguridad
- Estados de campaña (pending, running, done, expired)
- Zona horaria CDMX con conversión UTC automática
⚡ Beneficios Técnicos
- Mantenibilidad: Archivo principal reducido de ~2,150 a ~1,400 líneas
- Responsabilidades claras: Campaign Manager enfocado exclusivamente en campañas
- Extensibilidad: Base para futuras funcionalidades de campañas avanzadas
- Testabilidad: Componentes aislados más fáciles de probar
🛠️ Funcionalidades Específicas
- Interfaz unificada: UI consistente con otros managers del sistema
- Validación robusta: Sistema completo de validación de plantillas y datos
- Fallback systems: Sistemas de respaldo para compatibilidad con versiones anteriores
- Debug avanzado: Logs detallados y endpoint de monitoreo mejorado
🔐 Seguridad Mejorada
- Interfaces tipadas: Validación estricta de tipos entre componentes
- Wrapper patterns: Adaptadores seguros para compatibilidad hacia atrás
- Sanitización completa: Validación de todos los inputs de campañas
- Token management: Sistema seguro para cron externo y unsubscribe
📦 Compatibilidad
- 100% retrocompatible: Mismas opciones BD, hooks y estructura .env
- API consistency: Métodos públicos mantienen misma signatura
- Plugin upgrade: Actualización transparente sin pérdida de datos
- Manager integration: Comunicación fluida entre todos los managers
Structure Configure STMP
🔄 Arquitectura SMTP
- Separación SMTP: Nueva clase
WEC_SMTP_Managerindependiente para configuración SMTP - Autoloader compatible: Carga automática del manager SMTP sin cambios en estructura existente
- Singleton pattern: Gestión única y eficiente de la configuración SMTP
🔧 Mejoras de Configuración
- UI mejorada: Formularios SMTP con descriptions, placeholders y validaciones
- Mejor .env support: Detección automática y mensajes informativos sobre modo .env
- Validaciones robustas: Checks de seguridad y manejo de errores mejorado
⚡ Código Limpio
- Responsabilidades separadas: SMTP aislado del código principal (1,200+ líneas menos)
- 100% retrocompatible: Mismas opciones BD, hooks y estructura .env
- Extensible: Base para agregar nuevos providers SMTP
🛠️ Funcionalidades Técnicas
- Debug utilities: Función
get_config_status()para troubleshooting - Config optimization: Setup PHPMailer optimizado con timeouts y charset UTF-8
- Better error handling: Mensajes claros y redirects seguros en tests SMTP
Estructura email template
🔄 Refactoring Arquitectura
- Separación de clases: Creación del archivo
class-wec-template-manager.phpindependiente para gestión de plantillas - Template Manager: Nueva clase
WEC_Template_Managercon responsabilidades específicas del sistema de plantillas - Autoloader mejorado: Sistema automático de carga de clases WEC para mejor organización del código
- Singleton pattern: Implementación de patrón Singleton para el Template Manager
🔧 Mejoras del Sistema de Plantillas
- Metaboxes organizados:
- Asunto del correo (con placeholders disponibles)
- Vista previa (con estadísticas de contenido)
- Información de la plantilla (uso, fechas, estado)
- Columnas personalizadas: Lista de plantillas con columnas de Asunto, Uso y Acciones
- Estadísticas en tiempo real: Contador de palabras y caracteres que se actualiza al escribir
- Validación completa: Sistema robusto de validación antes de usar plantillas
⚡ Optimizaciones de Performance
- Carga condicional: Assets JavaScript/CSS solo se cargan en páginas relevantes
- Separación de responsabilidades: Template Manager independiente reduce la carga del archivo principal
- Modal optimizado: Sistema de vista previa más eficiente con menos conflictos
- Consultas BD optimizadas: Verificación de existencia de tablas antes de consultas
🔐 Mejoras de Seguridad
- Nonces específicos: Sistema de nonces independiente para plantillas (
wec_prev_iframe) - Capacidades validadas: Verificación de permisos específicos para plantillas
- Sanitización mejorada: Procesamiento seguro de datos de plantillas
- Autoloading seguro: Validación de clases antes de cargar archivos
🛠️ Funcionalidades Técnicas Nuevas
- Sistema de plantillas por defecto: Contenido automático para plantillas vacías
- Variables de plantilla: Sistema expandido de placeholders (site_name, current_year, etc.)
- Contador de uso: Tracking de cuántas campañas usan cada plantilla
- Estados visuales: Indicadores claros de publicado/borrador con estilos distintivos
- Ejemplo integrado: Función para crear plantillas de muestra automáticamente
Bug with cronos
- Bug de ejecución diaria: Corrección del problema donde las campañas programadas se ejecutaban todos los días a la misma hora en lugar de solo en la fecha específica programada
- Validación de fecha específica: Implementación de validación que asegura que las campañas se ejecuten únicamente en el día programado (no solo cuando la hora haya pasado)
- Sistema de expiración: Las campañas pendientes de días anteriores se marcan automáticamente como "expiradas" para prevenir ejecuciones incorrectas
Sistema Completo y Optimizado
🚀 Nuevas características
- Cron Externo: Sistema de cron automático vía URL externa con validación de seguridad
- Timezone CDMX: Soporte completo para zona horaria America/Mexico_City
- Inliner CSS: Sistema avanzado de CSS inlining para compatibilidad con Gmail
- Vista Previa: Modal responsive con múltiples tamaños de pantalla
- Unsubscribe: Sistema completo de baja de suscripciones con tokens seguros y placeholders
[[UNSUB_URL]]
🔧 Mejoras
- Interfaz optimizada: Eliminación de Panel, reorganización de menús
- SMTP mejorado: Config. SMTP incluye ahora pruebas de envío
- Campaña automática: Programación múltiple de crons para mayor confiabilidad
- CSS Reset: Estilos de email compatibles con todos los clientes
- Error handling: Gestión mejorada de errores con mensajes claros
- Procesamiento individual: Cada email se procesa con su URL única de unsubscribe
🐛 Correcciones
- Encoding: Eliminación de caracteres CRLF de Windows
- Métodos faltantes: Implementación de parse_env_file y enforce_button_styles
- Botones: Forzado de visibilidad en Gmail y clientes estrictos
- Links: Reset completo de enlaces para máxima compatibilidad
- Redirecciones: Fix de URLs después de eliminar Panel
- Unsubscribe URLs: Fix completo de placeholders que aparecían como
%5B%5BUNSUB_URL%5D%5D
🔐 Seguridad
- Cron externo: Validación con clave secreta configurable
- Tokens: Sistema seguro para enlaces de baja
- Sanitización: Limpieza mejorada de inputs de usuario
- Permisos: Validación estricta de capacidades de WordPress
⚡ Rendimiento
- Logs optimizados: Eliminación de trazas de debug en producción
- CSS inlining: Procesamiento optimizado para emails masivos
- Base de datos: Queries optimizadas para grandes volúmenes
- Cron persistente: Sistema robusto de procesamiento en background
🎨 Estilo/UI
- Menú limpio: Estructura simplificada (Campañas → Config. SMTP → Templates)
- Modal preview: Interfaz moderna para vista previa de emails
- Responsive: Adaptación perfecta a móviles y tablets
- Botones: Diseño consistente y compatible con todos los clientes
📚 Documentación
- Comentarios: Código completamente documentado
- Funciones: Descripción detallada de métodos críticos
- Timezone: Documentación del sistema CDMX/UTC
- Cron: Guía de configuración de cron externo
Problem view
🎨 Sistema de Plantillas
- Editor WYSIWYG: Integration con editor nativo de WordPress
- Metaboxes: Configuración de asunto y vista previa
- Placeholders: Variables dinámicas para personalización
- Validación: Verificación de HTML válido
📈 Analytics y Monitoreo
- Estado de envíos: Tracking de enviados/fallidos
- Logs detallados: Sistema de debugging configurable
- Performance metrics: Tiempo de procesamiento y memoria
- Queue monitoring: Estado de colas en tiempo real