Skip to Content

Cookie Consent

Cookie Consent es un banner de consentimiento de cookies totalmente personalizable, conforme con RGPD y CCPA, para WordPress. Le da a tus visitantes control total sobre qué cookies y scripts de tracking se ejecutan en tu sitio, organiza las cookies en categorías claras, impide que los scripts no esenciales se carguen sin aprobación y mantiene un registro de consentimientos a prueba de manipulación para que puedas demostrar el cumplimiento durante una auditoría.

El plugin es ligero, sin dependencias en el frontend, viene con un runtime en JavaScript puro y se integra con el plugin Polyglot para que los textos del banner se traduzcan automáticamente en cada idioma del sitio.

Vista previa del diálogo de cookies
Vista previa del diálogo de cookies

Puntos fuertes

  • Consentimiento por categorías. Las cookies se agrupan en tres categorías de serie: Necesarias (siempre activas), Analíticas (Google Analytics, Matomo, Hotjar, Mixpanel) y Marketing (Facebook Pixel, LinkedIn Insight, Google Ads).
  • Bloqueo automático de scripts. Añade patrones de URL para los scripts que deben quedar bloqueados hasta que se conceda el consentimiento. Cada patrón se asocia a una categoría y se desbloquea de forma automática en cuanto el visitante da su consentimiento.
  • Cinco posiciones de banner. Elige entre Abajo Izquierda, Abajo Derecha, Abajo Centro, Arriba y modal Centrado.
  • Editor de apariencia en vivo. Configura colores primario, de fondo y de texto con el selector nativo + entrada hex, más un botón flotante de ajustes opcional. Una previsualización en vivo muestra los cambios antes de guardar.
  • Registro y estadísticas de consentimientos. Cada decisión se guarda en una tabla dedicada. Un dashboard integrado muestra el total de consentimientos, los porcentajes de aceptación por categoría y un desglose diario paginado.
  • Editor multilingüe. Elige desde un desplegable en las pestañas General y Categorías el idioma a editar y traduce cada cadena visible por idioma. Con el plugin opcional Polyglot instalado, un botón AI Translate rellena automáticamente cualquier idioma destino a partir del origen.
  • Licencia y actualizaciones integradas. Introduce tu clave de licencia en la pestaña General para habilitar las actualizaciones automáticas con un clic desde el servidor de actualizaciones de Slotix — sin subidas manuales de ZIPs.
  • Duración configurable de la cookie. La cookie de consentimiento puede caducar de 1 a 730 días.
  • Pensado para developers. APIs PHP y JavaScript, más un evento DOM ccm:consent-updated, te permiten integrarlo con temas a medida, plugins y tag managers de terceros.

Requisitos

ComponenteVersión mínima
WordPress5.8 (probado hasta 7.0)
PHP7.4
MySQL5.7
MariaDB10.3

El plugin funciona en cualquier tema moderno. No necesita bibliotecas adicionales, pasos de build ni servicios externos para que el banner del frontal funcione. Polyglot es opcional; instálalo solo si necesitas traducciones multilingües del texto del banner.

Instalación

  1. Descarga la última versión de cookie-consent.zip desde el portal de plugins de Slotix o desde tu recibo de compra.
  2. En WordPress, ve a Plugins → Añadir nuevo → Subir plugin.
  3. Selecciona el ZIP y pulsa Instalar ahora.
  4. Pulsa Activar plugin cuando termine la instalación.
  5. Abre Ajustes → Cookie Consent para empezar a configurar. En una instalación nueva el banner ya viene activo con valores razonables, pero conviene revisar cada pestaña antes de pasar a producción.

Como alternativa, puedes subir la carpeta descomprimida cookie-consent a /wp-content/plugins/ vía SFTP y activarla desde Plugins → Plugins instalados.

Configuración

La pantalla de ajustes está dividida en cinco pestañas: General, Apariencia, Categorías, Bloqueo de scripts y Estadísticas. Recórrelas en orden la primera vez que configures el plugin.

General

Pestaña de ajustes generales
Pestaña de ajustes generales

La pestaña General está dividida en cuatro bloques, de arriba abajo: Licencia, el selector de Idioma de edición, Textos del banner y Ajustes globales.

Licencia. Pega la clave de licencia que recibiste en el correo de confirmación de compra — por ejemplo PILOT-XXXX-XXXX-XXXX-XXXX. Pulsa Verificar y guardar; el plugin contacta con el servidor de actualizaciones de Slotix, valida la clave contra tu dominio y habilita las actualizaciones automáticas con un clic desde la pantalla Plugins de WordPress. Sin clave el plugin sigue funcionando, pero tendrás que subir manualmente un ZIP nuevo en cada versión.

Idioma de edición. Un desplegable con los idiomas actualmente activos en el sitio (inglés, italiano, español, francés y alemán por defecto). Cada campo de texto de debajo se almacena por idioma — cambiar el selector cambia los valores visibles sin perder los otros. Si el plugin opcional Polyglot está instalado y activo, junto al selector aparece un botón Traducir con IA; al pulsarlo se rellena el idioma destino actual a partir del origen.

Textos del banner. Lo que ve el visitante. Cada campo se localiza según el idioma de edición activo.

  • Título del banner — encabezado en la parte alta del banner; por defecto “Valoramos tu privacidad”.
  • Descripción del banner — párrafo explicativo. Menciona qué cookies pones y enlaza la política de privacidad completa. La frase literal “Política de privacidad” dentro de la descripción se convierte automáticamente en un enlace a la URL de política de privacidad configurada.
  • Botón Aceptar todo — por defecto “Aceptar todo”. Da el consentimiento a todas las categorías.
  • Botón Rechazar todo — por defecto “Rechazar todo”. El RGPD exige que sea tan visible como Aceptar todo.
  • Botón Ajustes de cookies — por defecto “Ajustes de cookies”. Abre el modal de consentimiento granular desde el banner.
  • Botón Aceptar seleccionadas — por defecto “Aceptar seleccionadas”. Aparece dentro del modal; guarda lo que el visitante haya marcado y cierra el diálogo.

Ajustes globales. Se aplican a todos los idiomas.

  • URL de política de privacidad — adónde apunta el enlace inline “Política de privacidad” del banner. Acepta una ruta relativa (/politica-privacidad) o una URL completa. Déjalo en blanco para ocultar el enlace.
  • Caducidad de la cookie — cuántos días se recuerda la decisión, entre 1 y 730. El RGPD recomienda 365 días; valores más altos reducen los reavisos pero pueden ser cuestionados por auditores estrictos.

Apariencia

Pestaña de ajustes de apariencia
Pestaña de ajustes de apariencia

La pestaña Apariencia se organiza en tres secciones: Layout, Colores y Vista previa.

Layout.

  • Posición del banner — elige entre Abajo Izquierda, Abajo Derecha, Abajo Centro, Barra superior o Modal centrado. El Modal centrado renderiza un diálogo centrado con fondo que bloquea la interacción con la página hasta que se toma una decisión; úsalo solo cuando se exija cumplimiento estricto, porque es más intrusivo.
  • Botón flotante — un check. Cuando está activo, un pequeño icono queda anclado en la esquina de la página para que los visitantes puedan reabrir los ajustes de consentimiento en cualquier momento. Obligatorio en algunas jurisdicciones (en particular, Italia y Francia).

Colores. Cada fila empareja un selector nativo de color con una entrada hex — al pulsar el selector se abre el color picker del sistema operativo, y el valor hex se mantiene sincronizado con el selector en ambos sentidos.

  • Color primario — se usa para botones y conmutadores del modal. Elige un color que cumpla contraste WCAG AA contra texto blanco.
  • Color de fondo — fondo del banner y del modal. Por defecto, blanco.
  • Color de texto — texto del cuerpo. Por defecto, gris oscuro.

Vista previa. Una miniatura en vivo del banner se sitúa debajo de las filas de color y se actualiza en tiempo real conforme cambias títulos, descripciones, etiquetas de botones y colores en otras partes del admin — así puedes verificar el resultado antes de guardar.

Categorías

Pestaña de ajustes de categorías
Pestaña de ajustes de categorías

El plugin trae tres categorías. Puedes renombrarlas y editar sus descripciones por idioma. La categoría Necesarias siempre está activa y al visitante se le muestra con un badge “Siempre activa” en vez de un conmutador — no se puede desactivar ni el visitante puede apagarla.

  • Necesarias. Cookies que el sitio necesita para funcionar — sesión, autenticación, tokens de seguridad, preferencia de idioma. Siempre activas.
  • Analíticas. Cookies estadísticas que miden cómo interactúan los visitantes con el sitio. Ejemplos: _ga, _gid, _hjSession, mp_*.
  • Marketing. Cookies usadas para seguir a los visitantes entre sitios con fines publicitarios. Ejemplos: _fbp, fr, IDE, li_sugr.

En cada categoría no necesaria puedes editar:

  • Nombre — se muestra como título de la categoría en el modal de ajustes. Localizado por idioma de edición.
  • Descripción — aparece bajo el título. Explica en lenguaje llano qué scripts controla la categoría. Localizada por idioma de edición.
  • Activado por defecto — cuando está marcado, el conmutador arranca en ON cuando un visitante nuevo abre el modal (todavía puede apagarlo antes de pulsar Aceptar seleccionadas). Cuando no está marcado, arranca en OFF.

La pestaña Categorías respeta el selector de Idioma de edición de la parte alta, así que puedes redactar descripciones en italiano para el banner italiano y descripciones en inglés para el inglés de forma independiente. Los ajustes estructurales (qué categorías existen, si son obligatorias, su estado por defecto) son globales y se comparten entre idiomas.

Bloqueo de scripts

Pestaña de ajustes de bloqueo de scripts
Pestaña de ajustes de bloqueo de scripts

Aquí es donde ocurre realmente el cumplimiento. Sin bloqueo de scripts el banner es decorativo: los visitantes pueden rechazar cookies, pero los scripts de terceros se cargarán igualmente.

La pestaña se divide en un formulario Añadir nuevo patrón de script arriba y dos tablas abajo, una para la categoría Analíticas y otra para Marketing.

El formulario Añadir pide tres campos:

  • Nombre — una etiqueta humana que aparece en las tablas del admin (p. ej. “Google Analytics”). No visible para los visitantes.
  • Patrón de URL — una subcadena, sin distinguir mayúsculas, que se compara con el atributo src y el cuerpo inline de cada script. Ejemplos: google-analytics.com, googletagmanager.com, connect.facebook.net, hotjar.com, linkedin.com/insight.
  • Categoría — Analíticas o Marketing. El script se carga solo cuando el visitante acepta esa categoría.

Cada fila en las tablas Analíticas / Marketing muestra el Nombre, el Patrón, un conmutador de Estado por fila (activar/desactivar sin borrar) y una acción Eliminar. El plugin trae un conjunto inicial de patrones para las plataformas de analítica y publicidad más comunes; revísalo y amplíalo según la configuración real de tu tag manager.

Los patrones se comparan en cada carga de página. A los scripts bloqueados se les reescribe el atributo type a text/plain para que el navegador no los ejecute. Cuando se concede el consentimiento, el runtime localiza las etiquetas bloqueadas, restaura su type a text/javascript y las reinyecta para que se ejecuten al momento sin recargar la página.

Estadísticas

Dashboard de estadísticas
Dashboard de estadísticas

La pestaña Estadísticas es de solo lectura y se organiza en tres tarjetas KPI arriba y una tabla paginada de Desglose diario abajo.

Tarjetas KPI.

  • Total de consentimientos — cada Aceptar todo, Rechazar todo o Aceptar seleccionadas cuenta como un registro.
  • Analíticas aceptadas — total de visitantes que aceptan Analíticas, con el porcentaje de aceptación sobre el Total de consentimientos.
  • Marketing aceptadas — lo mismo para Marketing.

Desglose diario. Una tabla con una fila por día natural en el que se registró al menos una decisión, con Fecha, Total, Analíticas y Marketing aceptadas. La lista está ordenada de más reciente a más antigua y paginada a 15 filas por página; usa los botones de navegación (« ») o teclea un número de página directamente en el campo para saltar. La esquina superior derecha muestra el total de días.

Usa estos números para estimar cuánto tráfico de analítica estás perdiendo por los rechazos y para demostrar a los auditores que la recogida de consentimiento funciona.

Uso

Una vez configurado, el banner aparece automáticamente en la primera visita y cuando caduca la cookie de consentimiento. No hace falta usar shortcodes ni etiquetas de plantilla.

Reabrir el modal de ajustes

Si tienes el botón flotante desactivado, puedes añadir un enlace en cualquier parte de tu sitio que permita a los visitantes reabrir los ajustes. Usa un ancla normal con una clase:

<a href="#" class="ccm-open-settings">Preferencias de cookies</a>

Cualquier elemento con la clase ccm-open-settings abre el modal de consentimiento al hacer clic. Es útil para enlaces de footer y páginas de cuenta.

API PHP

El código del servidor puede ramificar según el consentimiento antes de emitir markup o encolar scripts:

if ( function_exists( 'cookie_consent' ) && cookie_consent()->public->has_consent( 'analytical' ) ) { wp_enqueue_script( 'my-analytics', 'https://example.com/analytics.js', array(), null, true ); }

Las categorías que acepta has_consent() son los slugs de la pestaña Categorías: necessary, analytical, marketing, más cualquier slug personalizado que hayas añadido.

API JavaScript

El frontal expone un objeto global CookieConsent con una API pequeña y estable:

// Check whether the visitor has opted in to a specific category. CookieConsent.hasConsent('marketing'); // → true | false // Read the full consent object. CookieConsent.getConsent(); // → { necessary: true, analytical: true, marketing: false, ts: 1716000000 } // Programmatically open the settings modal. CookieConsent.openSettings(); // Wipe the stored decision so the banner reappears. CookieConsent.resetConsent();

Evento de cambio de consentimiento

El runtime dispara un evento DOM cada vez que se concede, actualiza o revoca el consentimiento. Escúchalo para conectar tus propias integraciones — por ejemplo, para empujar un evento de dataLayer personalizado a Google Tag Manager:

document.addEventListener('ccm:consent-updated', function (event) { const consent = event.detail; window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: 'cookie_consent_update', analytical: consent.analytical, marketing: consent.marketing, }); });

El payload del evento refleja el objeto que devuelve CookieConsent.getConsent().

Hook de filtro

Los developers PHP pueden modificar el objeto de ajustes que se pasa al runtime del frontal con el filtro ccm_js_settings. Es útil para sobrescribir textos por idioma o por página sin tocar la base de datos:

add_filter( 'ccm_js_settings', function ( $settings ) { if ( is_page( 'corporate' ) ) { $settings['title'] = __( 'Corporate cookie policy', 'my-theme' ); } return $settings; } );

Tablas de base de datos

Al activarse, el plugin crea dos tablas en la base de datos de WordPress:

  • {wp_prefix}ccm_consents — una fila por decisión de consentimiento, con timestamp, hash de la IP, user agent y la elección booleana por categoría.
  • {wp_prefix}ccm_blocked_scripts — los patrones de bloqueo de scripts configurados en el admin.

Ambas tablas se eliminan mediante el uninstall.php incluido cuando el plugin se borra desde la interfaz de WordPress.

Capturas

Las pantallas siguientes ilustran un ciclo completo de configuración.

Diálogo de consentimiento de cookies tal y como lo ven los visitantes
Diálogo de consentimiento de cookies tal y como lo ven los visitantes
Pestaña General con textos del banner y caducidad de la cookie
Pestaña General con textos del banner y caducidad de la cookie
Pestaña Apariencia con vista previa en vivo
Pestaña Apariencia con vista previa en vivo
Pestaña Categorías con los tres grupos por defecto
Pestaña Categorías con los tres grupos por defecto
Pestaña Bloqueo de scripts con patrones de URL asignados a categorías
Pestaña Bloqueo de scripts con patrones de URL asignados a categorías
Dashboard de estadísticas con ratios de aceptación
Dashboard de estadísticas con ratios de aceptación

FAQ

¿El plugin cumple el RGPD de fábrica?

El plugin aporta todas las primitivas técnicas necesarias para cumplir el RGPD: consentimiento previo, categorías granulares, un botón de rechazo igual de visible, retirada sencilla del consentimiento y un registro a prueba de manipulación. El cumplimiento es una propiedad de cómo configures el plugin: aun así, debes registrar cada script de terceros en la pestaña Bloqueo de scripts, escribir una política de privacidad exacta y enlazarla desde el banner.

¿Cubre CCPA y otras leyes de privacidad?

El mismo mecanismo — categorías granulares, bloqueo de scripts y un diálogo de ajustes reabrible — satisface el requisito “Do Not Sell” de la CCPA, el UK GDPR, la LGPD brasileña y la mayoría de leyes modernas de privacidad. Para textos de botón específicos por región puedes usar el filtro ccm_js_settings combinado con un plugin de geolocalización, o apoyarte en Polyglot para variación por idioma.

¿Ralentizará el sitio?

No. El runtime del frontal es un único archivo de JavaScript puro (unos 12 KB minificado, sin jQuery ni dependencias externas) cargado con defer. El banner se renderiza en una sola pasada del DOM y no hay ninguna llamada remota durante la carga de la página.

¿Funciona con plugins de caché?

Sí. El banner lee su estado de consentimiento de una cookie first-party y se renderiza enteramente del lado cliente, así que es compatible con cachés de página completa (WP Rocket, LiteSpeed Cache, W3 Total Cache, Cloudflare APO). Comprueba que tu capa de caché no esté eliminando la cookie de consentimiento.

¿Cómo se integra con Google Tag Manager?

Hay dos patrones soportados. El más sencillo es añadir googletagmanager.com a la pestaña Bloqueo de scripts y asignarlo a la categoría Analíticas o Marketing — el propio GTM no se cargará hasta que se conceda el consentimiento. El patrón más flexible es dejar que GTM se cargue siempre y controlar tags individuales dentro de GTM usando el evento ccm:consent-updated como disparador.

¿Puedo traducir el banner?

Sí. El plugin está totalmente internacionalizado; el text domain es cookie-consent y los archivos .pot están en la carpeta languages. Si tienes Polyglot instalado, las cadenas del banner se recogen automáticamente y se traducen para cada idioma activo. También puedes sobrescribir textos por página vía el filtro ccm_js_settings.

¿Cuánto tiempo se guarda el consentimiento?

Los días que configures en General → Caducidad de la cookie. El valor por defecto es 365 días. Cuando la cookie caduca, el banner reaparece y el visitante debe volver a dar su consentimiento.

¿El plugin almacena datos personales?

El registro de consentimientos guarda un hash SHA-256 de la dirección IP del visitante (nunca la IP en claro), la cadena del user agent, un timestamp y las elecciones por categoría. No se conservan nombres, correos ni IPs completas. El registro está pensado para satisfacer la exigencia del RGPD de demostrar que se concedió el consentimiento.

¿Puedo exportar el registro de consentimientos?

El registro se guarda en una tabla estándar de WordPress ({wp_prefix}ccm_consents) y se puede exportar con cualquier herramienta de base de datos — phpMyAdmin, Adminer, wp db export o un cliente SQL. Una exportación CSV nativa desde la pestaña Estadísticas está prevista para una próxima versión.

Resolución de problemas

El banner no aparece

El banner se muestra automáticamente solo cuando no hay cookie ccm_consent en el navegador del visitante. Si ya has aceptado o rechazado en una visita anterior, la decisión se recuerda durante la Caducidad de la cookie configurada — normalmente 365 días — y el banner queda oculto. Para probar desde cero, abre las DevTools del navegador, borra la cookie ccm_consent en Aplicación → Cookies y recarga. Como alternativa no destructiva, pulsa el botón flotante de ajustes (si está activo) y usa Rechazar todo para que el banner aparezca en la siguiente carga, o llama a CookieConsent.resetConsent() desde la consola del navegador.

Los scripts siguen cargándose tras rechazar

Verifica que cada script de tracking esté listado en Bloqueo de scripts y que el patrón de URL coincida de verdad. Los scripts inline inyectados por el tema o por page builders también se bloquean, pero solo cuando su contenido contiene el patrón configurado. Usa la pestaña Red de las DevTools para identificar el host exacto de cualquier petición que se haya colado y añádelo a la tabla de Bloqueo de scripts.

El botón flotante se solapa con otros widgets

Desactiva Mostrar botón flotante en Apariencia y añade en su lugar un enlace <a class="ccm-open-settings">Preferencias de cookies</a> en tu footer. Así controlas la ubicación al detalle.

Las estadísticas muestran cero consentimientos

Los contadores incrementan solo cuando un visitante pulsa un botón del banner. Las vistas de página sin interacción con el banner no se registran. Si después del lanzamiento ves cero, comprueba que el banner se esté renderizando y que no estés navegando como administrador en una página en la que ya se haya descartado el banner antes.

Los textos del banner no se traducen

Polyglot debe estar instalado y activo, y el idioma destino tiene que estar activo en Polyglot → Ajustes. Las cadenas del banner se traducen al primer pedido tras activar un idioma; entra una vez como administrador a una página en ese idioma para disparar la traducción.

Los ajustes se reinician tras actualizar

Toda la configuración del admin (textos del banner, categorías, apariencia, traducciones) vive en la única opción ccm_settings de WordPress. Los patrones de bloqueo de scripts viven en la tabla {wp_prefix}ccm_blocked_scripts. Ninguna de las dos se toca durante las actualizaciones del plugin. Si ves reinicios, comprueba si un plugin de seguridad o de sincronización con staging está sobrescribiendo opciones — rara vez es el propio plugin de cookies.

Last updated on