Registro de consentimientos de términos y condiciones

Descripción

WordPress almacena el consentimiento como un simple «Sí». No consta el cuándo, desde, dónde, ni qué versión de tus términos y condiciones se mostraba en pantalla. El día que alguien lo cuestione ese «Sí» valdrá de muy poco.

Registro de consentimientos de términos y condiciones cubre cualquier casilla de aceptación de tu sitio: WooCommerce (clásico y con bloques), Contact Form 7, WPForms, Gravity Forms, Fluent Forms, comentarios, acceso y registro, o shortcodes y bloques independientes.

Cada consentimiento aceptado se registra en una fila de una tabla exclusiva indexada, junto con la marca temporal, la IP, el agente de usuario, la versión vigente del documento y el texto exacto mostrado, todo ello protegido con un algoritmo hash SHA-256 para que cualquier modificación posterior sea detectable. Esto es exactamente lo que el artículo 7.1 del RGPD exige que puedas demostrar.

Filtra, busca, exporta a CSV, se integra con las herramientas de privacidad nativas de WordPress y, con un solo clic, abre un certificado imprimible en formato A4 de cualquier registro que puedes guardar como PDF.

Funciona con o sin WooCommerce

El menú de administración se encuentra en «Usuarios Consentimientos» en todas las instalaciones, tanto si se utiliza WooCommerce como si no. Los elementos específicos de WooCommerce (captura al finalizar compra clásico y de bloques, caja meta en los pedidos, columna «Consentimiento» en la lista de pedidos y línea de consentimiento opcional en los correos electrónicos de los pedidos) solo se cargan cuando se activa WooCommerce. Todo lo dem (registros, configuración, exportación a CSV, certificado en PDF e integración con Privacy Tools) funcionan de la misma manera en cualquier sitio de WordPress.

Orígenes de consentimientos

  • Finalizar compra clásico de WooCommerce (automático cuando está activo WC): Captura la casilla de verificación nativa de los términos. Se almacena como terms_and_privacy.
  • Bloque de finalizar compra de WooCommerce (automático cuando WooCommerce está activo): Captura las compras realizadas a través del proceso de pago con bloques, que es el que WooCommerce genera para las tiendas nuevas desde la versión 8.3 y que los ganchos clásicos nunca detectan. Almacena el texto exacto del bloque de términos y condiciones. Se registra como terms_and_privacy cuando ese bloque requiere una casilla de verificación, o como terms_notice cuando solo muestra el párrafo informativo que WooCommerce incluye por defecto, por lo que la aceptación por comportamiento nunca se registra como consentimiento explícito. Un botón de activación añade una casilla de selección obligatoria propia del plugin, validada desde el servidor, para tener evidencias que no dependan de la validación del navegador. Activado por defecto.
  • Contact Form 7 (automático): Detecta automáticamente los campos [acceptance] y el primer campo de correo electrónico del formulario. Se almacena como cf7_form_{ID}, un tipo por formulario. No se necesitan fragmentos de código. Activado por defecto, pero desactívalo en los ajustes si no es aplicable a tu sitio.
  • WPForms (automático): Detecta automáticamente los campos de acuerdo RGPD y el primer campo de correo electrónico del formulario. Se almacena como wpforms_form_{ID}, uno por cada formulario. Funciona con WPForms Lite y Pro. No requiere fragmentos de código. Activado por defecto, pero desactívalo en los ajustes si no es aplicable a tu sitio.
  • Gravity Forms (automático): Detecta automáticamente los campos de consentimiento y el primer campo de correo electrónico del formulario. Se almacena como gravityforms_form_{ID}, un tipo por formulario. No se necesitan fragmentos de código. Está activado por defecto; desactívalo en los ajustes si no es aplicable.
  • Fluent Forms (automático): Detecta automáticamente los campos de aceptación del RGPD y de los términos y condiciones, así como el primer campo de correo electrónico del formulario. Se almacena como fluentforms_form_{ID}, un tipo por formulario. Funciona con Fluent Forms Lite y Pro. No requiere fragmentos de código. Está activado por defecto; desactívalo en los ajustes si no es aplicable.
  • Comentarios de WordPress (automático): Registra la casilla de verificación nativa wp-comment-cookies-consent (introducida en WP 4.9.6) cuando el visitante da su consentimiento. Se almacena como comment_consent. Está activada por defecto, pero se puede desactivar en los ajustes si tu sitio utiliza Disqus, Jetpack u otro sistema de comentarios de terceros. Ten en cuenta que la casilla nativa de aceptación es una preferencia de cookies, no es un consentimiento para almacenar datos del comentarista.
  • Consentimiento de privacidad para comentarios y reseñas de WooCommerce (opcional): Añade una casilla de verificación de privacidad obligatoria al formulario de comentarios, bloquea el envío desde el servidor si no se marca y almacena la aceptación como comment_privacy. Este es el consentimiento previsto en el artículo 7.1 para el tratamiento del nombre y el correo electrónico que facilita el autor del comentario, a diferencia de la preferencia de cookies mencionada anteriormente. Las reseñas de productos de WooCommerce comparten el formulario de comentarios, por lo que están cubiertas por la misma opción. Desactivada por defecto.
  • Formularios personalizados de registro de membresía, cursos y otros (aceptación): Captura las cuentas creadas fuera de los formularios estándar de WordPress y WooCommerce, así como las de MemberPress, LearnDash, Ultimate Member o Paid Memberships Pro, y los registros en multisitio. Se almacenan como user_register. Las cuentas creadas desde la pantalla de «Usuarios» de la administración nunca se registran. Desactivado por defecto.
  • Acceso y registro en WordPress (automático): registra los accesos y registros correctos a través de wp-login.php cuando se marca la casilla de verificación de consentimiento en el formulario. Se almacena como wp_login y wp_register. El registro está activado por defecto y el acceso está desactivado por defecto (un formulario de acceso normal no tiene casilla de verificación de consentimiento, por lo que el acceso solo es relevante para los flujos de renovación del consentimiento). La casilla «Recuérdame» queda excluida a propósit (preferencia de ePrivacy / cookies, no es consentimiento RGPD).
  • Acceso y registro en WooCommerce (automático cuando WC está activo): el mismo concepto para la página «Mi cuenta». Se almacenan como wc_login y wc_register. El registro está activado por defecto y el acceso está desactivado por defecto, al igual que en las filas de WordPress anteriores. Un conmutador opcional permite insertar la casilla de verificación de consentimiento en el formulario de registro de WC, ya que WooCommerce no la incluye de forma nativa.
  • Shortcode [tccl_consent_box] y bloque Gutenberg: Inserta una casilla de consentimiento independiente en cualquier página, entrada, área de widgets o como bloque independiente. El envío se realiza a una variable REST y se crea un registro. Siempre disponible.

Para cualquier otro caso (Elementor Forms, Forminator, flujos personalizados), llama a tccl_save_consent() desde el gancho correspondiente.

Por qué una tabla específica

Almacenar miles de registros de consentimiento en wp_postmeta resulta ineficaz y lento. El plugin utiliza su propia tabla indexada y ofrece una función pública (tccl_save_consent) a la que puedes llamar desde cualquier lugar para registrar consentimientos adicionales en un mismo lugar.

Características principales

  • Registra la marca temporal en UTC, la dirección IP, el agente de usuario, la versión del documento, la URL de origen y el texto completo del consentimiento de cada aceptación.
  • Tabla de base de datos personalizada con los índices correctos (para no saturar wp_postmeta).
  • A prueba de manipulaciones: Cada registro está sellado con un hash SHA-256. Cualquier modificación posterior del texto almacenado se detecta y se señala como ALTERADO en la lista de registros.
  • Certificado imprimible en A4 de cada registro, con un botón integrado «Imprimir / Guardar como PDF»: El navegador exporta el certificado a PDF de forma nativa, sin necesidad de librerías externas.
  • Integración con las herramientas de privacidad nativas: Herramientas > Exportar datos personales y Herramientas > Borrar datos personales incluyen registros de consentimiento (el borrado anonimiza los datos en lugar de borrarlos, ya que el registro en sí mismo es la base legal para conservarlos).
  • Los textos de la página de finalizar compra de WooCommerce son opcionales. Si los dejas en blanco se mostrarán al cliente los textos nativos de WooCommerce y se guardarán tal cual.
  • Aumento automático de la versión cuando cambia el texto (se sugiere MAJOR.MINOR-AAAA-MM-DD).
  • Desactivación opcional del almacenamiento de IP y/o agente de usuario.
  • Retención configurable con un botón de anonimización con un solo clic (se conservan los registros, se borra la información de identificación personal).
  • Acceso configurable por perfil: Habilita el registro de consentimientos a otros perfiles (por ejemplo, un delegado de protección de datos) desde «Ajustes Acceso», sin convertirlos en administradores.
  • Un registro por cada casilla marcada: Un formulario con una casilla de verificación obligatoria sobre privacidad y otra opcional sobre marketing genera dos registros independientes, de modo que el consentimiento opcional queda registrado por sí solo, en lugar de quedar incluido en el obligatorio.
  • Texto de consentimiento personalizado por formulario:: Los formularios de acceso y registro de WordPress y WooCommerce pueden almacenar su propio texto, recurriendo al valor por defecto general del sitio cuando no se especifique ninguno.
  • Filtros activos de coincidencia parcial (correo electrónico, pedido, intervalo de fechas, tipo, búsqueda de texto completo dentro del texto admitido) + exportación CSV filtrada con BOM UTF-8 (se abre correctamente en Excel).
  • (Cuando está activo WooCommerce) Caja meta en el pedido con el resumen del consentimiento, el distintivo de integridad y el indicador de versión obsoleta. Columna «Consentimiento» en la lista de pedidos (versión clásica y HPOS) con un indicador visual rápido del estado. Línea de consentimiento opcional en el correo electrónico de nuevo pedido (administrador) y en el correo electrónico de confirmación del pedido (cliente) , ambas desactivadas por defecto.
  • Ajuste opcional delete_data_on_uninstall (desactivado por defecto). La desinstalación no borra evidencias de consentimiento a menos que tú lo decidas explícitamente.
  • Compatible con HPOS (tablas de pedidos personalizadas).
  • Función pública tccl_save_consent() para registrar consentimientos desde cualquier lugar.

Preparado para traducciones

Todas las cadenas utilizan el dominio de texto terms-conditions-consent-log. Las traducciones se gestionan a través de translate.wordpress.org.

Soporte

¿Necesitas soporte privado o un desarrollo personalizado?

¿Necesitas ayuda individualizada, resolución de problemas prioritaria o una funcionalidad, integración o adaptaciones personalizadas creadas específicamente para tu sitio? Ofrezco soporte privado y desarrollos personalizados. Solo tienes que contactarme y decirme qué necesitas.

¿Necesitas ayuda o tienes sugerencias?

¿Te gusta el plugin? ¡Déjanos un comentario de 5 estrellas y así ayudas a que lo conozcan otros!

Acerca de AyudaWP.com

Somos especialistas en plugins de optimización de seguridad, SEO, IA y rendimiento para WordPress. Creamos herramientas que solucionan problemas reales a los propietarios de sitios WordPress manteniendo los más altos estándares de programación y requisitos de accesibilidad.

Capturas

Bloques

Este plugin proporciona 1 bloque.

  • Consent box A self-contained consent checkbox that records each acceptance in the consent log.

Instalación

  1. Sube la carpeta del plugin a /wp-content/plugins/terms-conditions-consent-log/ o instálalo a través de «Plugins > Añadir nuevo».
  2. Activa el plugin.
  3. Abre la página de administración del plugin: Usuarios > Consentimientos.
  4. En la pestaña de ajustes, las integraciones (comentarios de WordPress, Contact Form 7, WPForms, Gravity Forms, Fluent Forms y registro de WP/WooCommerce) están activadas por defecto para cumplir con el artículo 7.1 del RGPD (prueba del consentimiento) . Desactiva las que no sean aplicables a tu sitio. La captura de datos de acceso está desactivada por defecto y solo es necesario activarla si tu formulario de acceso incluye una casilla de consentimiento (por ejemplo, una solicitud de renovación del consentimiento). La casilla de privacidad para comentarios y reseñas, así como el registro de altas procedentes de plugins de membresía, también están desactivados por defecto: actívalos si son aplicables a tu sitio web. También puedes pegar [tccl_consent_box] en cualquier página o entrada.
  5. (Opcional, solo para WooCommerce) Modifica el texto de la casilla de verificación o añade un párrafo informativo que se muestre antes de finalizar la compra. Déjalos vacíos para mantener el texto nativo de WooCommerce.
  6. A partir de ahora se registrará automáticamente cada consentimiento aceptado procedente de cualquiera de los orígenes activos.

FAQ

¿Puedo usar el plugin sin WooCommerce?

Sí. Actívalo en cualquier sitio WordPress y los registros, ajustes, exportación a CSV, certificado en PDF y la integración con las herramientas de privacidad funcionarán de la misma manera. Los elementos específicos de WooCommerce (captura en la página de pago, caja meta en el pedido, columna de la lista de pedidos y línea del correo electrónico del pedido) solo se cargan cuando está activo WooCommerce.

¿Cómo puedo capturar consentimientos desde Contact Form 7?

Abre «Consentimientos > Ajustes > Integraciones» y marca la casilla «Registrar cada envío de formulario CF7 que marque un campo [acceptance]». Luego asegúrate de que tus formularios de CF7 incluyan un campo [acceptance], p. ej.:

[acceptance privacy] I have read and agree to the privacy policy. [/acceptance]

El plugin utiliza el ID del formulario como parte del campo consent_type (cf7_form_{ID}), para poder filtrar cada formulario por separado. El primer campo de correo electrónico del formulario se utiliza como dirección de correo electrónico del remitente. Sin fragmentos de código ni modificaciones en el archivo functions.php.

¿Cómo puedo capturar consentimientos desde WPForms?

Ve a «Consentimientos > Ajustes > Integraciones» y marca la casilla «Registrar cada envío de WPForms que marque un campo de aceptación de RGPD». A continuación añade un campo de aceptación de RGPD a tu formulario desde el maquetador de WPForms («Campos estándar Acuerdo RGPD») y modifica su etiqueta con el texto exacto que quieras que se registre (p. ej., «He leído y acepto la política de privacidad»).

El plugin utiliza el ID del formulario como parte del campo consent_type (wpforms_form_{ID}), por lo que cada formulario se puede filtrar por separado. El primer campo de correo electrónico del formulario se utiliza como correo electrónico del destinatario, y el texto de la etiqueta del campo «Acuerdo RGPD» es el que se almacena como texto aceptado. Funciona con WPForms Lite y Pro. Sin fragmentos de código ni modificaciones en el archivo functions.php.

¿Cómo puedo capturar consentimientos desde Gravity Forms?

Ve a «Registro de consentimientos > Ajustes > Integraciones» y marca la casilla «Registrar cada envío de Gravity Forms en el que se marque un campo de consentimiento». A continuación añade un campo de consentimiento a tu formulario desde el editor de Gravity Forms (Campos avanzados Consentimiento) y configura el texto de la casilla de selección con la redacción exacta que quieras que quede registrada (por ejemplo, «He leído y acepto la política de privacidad»).

El plugin utiliza el ID del formulario como parte del consent_type (gravityforms_form_{ID}), por lo que cada formulario se puede filtrar por separado. El primer campo de correo electrónico del formulario se utiliza como correo electrónico del remitente, y la etiqueta de la casilla de selección del campo de consentimiento es lo que se almacena como texto aceptado. Sin fragmentos de código ni modificaciones en el archivo functions.php.

¿Cómo puedo capturar consentimientos desde Fluent Forms?

Ve a «Registro de consentimientos > Ajustes > Integraciones» y marca la casilla «Registrar cada envío de Fluent Forms en el que se marque un campo de aceptación del RGPD o de los términos y condiciones». A continuación, añade un campo de aceptación del RGPD o de los términos y condiciones a tu formulario desde el editor de Fluent Forms.

El plugin utiliza el ID del formulario como parte del consent_type (fluentforms_form_{ID}), por lo que cada formulario se puede filtrar por separado. El primer campo de correo electrónico del formulario se utiliza como correo electrónico del remitente, y el texto del acuerdo de dicho campo es el que se almacena como texto aceptado. Funciona con Fluent Forms Lite y Pro. Sin fragmentos de código ni modificaciones en el archivo functions.php.

Hay un ajuste que debes comprobar en el propio campo: el campo «Términos y condiciones» tiene una casilla de selección, y es lo que convierte al campo en un acto de consentimiento. Si está desactivada, Fluent Forms muestra tus términos como texto sin formato y no muestra ninguna casilla de selección, por lo que el visitante nunca acepta nada y no hay nada que registrar. Abre el campo en el editor de Fluent Forms y asegúrate de que la casilla de selección esté activada.

He añadido un campo de consentimiento, pero no se registra nada. ¿Por qué?

La razón más habitual es que el formulario no incluya ningún campo de correo electrónico. El registro de consentimientos identifica al titular de cada registro mediante su dirección de correo electrónico, y las integraciones del formulario la extraen del primer campo de correo electrónico del formulario. Sin este campo no es posible identificar a un visitante anónimo y, por lo tanto, el envío se omite deliberadamente, ya que un registro que no puede atribuirse a nadie no constituye prueba de nada.

Si la persona que envía el formulario ha iniciado sesión, el plugin recurre a la dirección de correo electrónico que figura en su perfil de WordPress, por lo que los formularios a los que se accede tras iniciar sesión (áreas de miembros, inscripciones a cursos) se registran incluso aunque no haya un campo de correo electrónico en el formulario. Para los formularios públicos, añade un campo de correo electrónico.

Otra cosa que hay que comprobar es que el campo de consentimiento sea realmente un campo de consentimiento del maquetador de formularios, marcado por el visitante: una etiqueta [acceptance] en Contact Form 7, un campo de acuerdo con el RGPD en WPForms, un campo de consentimiento en Gravity Forms o un campo de acuerdo con el RGPD o de términos y condiciones en Fluent Forms. No se detecta una casilla de selección simple ni un bloque HTML que contenga tus términos.

Muestra una casilla de consentimiento propia + botón de envío, con un campo opcional de correo electrónico para los visitantes que no hayan iniciado sesión. El envío se realiza a una variable REST que registra el consentimiento mediante la función tccl_save_consent(). Añádela a cualquier página, entrada, área de widgets o bloque independiente, p. ej.:

[tccl_consent_box text="I have read and agree to the privacy policy." consent_type="newsletter_signup"]

La misma funcionalidad está también disponible como bloque de Gutenbeg llamado «Casilla de consentimiento».

Importante: El shortcode genera su propio <form> con un botón de envío, por lo que NO debe anidarse dentro del formulario de otro generador de formularios (Contact Form 7, WPForms, Gravity Forms, Fluent Forms, Elementor Forms, etc.). Si lo incrustas dentro de otro formulario acabarás teniendo dos botones de envío y flujos de envío en conflicto. Para los generadores de formularios utiliza la integración específica (Contact Forms 7, WPForms, Gravity Forms y Fluent Forms están integrados, para el resto engancha tccl_save_consent() desde la acción de envío correspondiente. Consulta las preguntas frecuentes más abajo).

Además: NO utilices este shortcode como sustituto de la casilla de verificación de cookies de un plugin de cookies/banners (Complianz, CookieYes, Real Cookie Banner, etc.). El contexto jurídico es diferente, ya que los banners de cookies tienen que ver con la Directiva ePrivacy/cookies, este registro de consentimientos trata sobre los consentimientos específicos del artículo 7.1 del RGPD para el tratamiento concreto de datos personales. Mezclarlos da lugar a evidencias ambiguas.

¿Cómo se registran los consentimientos de acceso / registro de WordPress y WooCommerce?

El plugin se integra en el evento estándar wp_login (que abarca tanto wp-login.php como el acceso desde «Mi cuenta» de WooCommerce) y en los eventos de registro públicos (register_new_user para el formulario de WP y woocommerce_created_customer para el formulario de WC). Por cada evento comprueba el envío $_POST en busca de una casilla de verificación de consentimiento marcada y si hay alguna crea un registro con consent_type establecido en wp_login, wp_register, wc_login o wc_register según corresponda.

Algunos detalles que merece la pena conocer:

  • «Recuérdame» está excluido intencionadamente. Es una preferencia de ePrivacy para ampliar la cookie de sesión, no un consentimiento para el artículo 7.1 del RGPD. Registrarlo contaminaría el control de auditoría con eventos que no son de consentimiento. La exclusión está predefinida..
  • Si no hay casilla de verificación en el formulario no se crea ningún registro. El plugin no registra «cualquier acceso», solo apunta algo cuando haya algo que se asemeje a una casilla de verificación de consentimiento explícito que registrar. Un acceso o registro sin campo de consentimiento nunca genera un registro.
  • El detector es heurístico. A los nombres de campos que contentan consent, gdpr, privacy, terms, acceptance, agreement, accept, rgpd, politica, privacidad o terminos (case-insensitive) se les trata como si fuesen casilal de verificación de consentimiento. Si tu plugin de RGPD / privacidad utiliza un nombre diferente apúntalo en «Ajustes Integraciones Nombres de campos personalizados de consentimiento» (separados or comas, coincidencia exacta).
  • La opción de casilla de verificación integrada cubre esta carencia de WooCommerce. WooCommerce no incluye de serie una casilla de verificación de consentimiento en su formulario de registro, sino solo un párrafo sobre la política de privacidad. Si tu sitio no utiliza un plugin aparte para el RGPD activa «Añadir una casilla de verificación de consentimiento obligatoria al formulario de registro de WooCommerce» en los ajustes y el plugin mostrará la casilla de verificación encima del botón de enviar y rechazará el registro si no se marca. Existe la misma opción para el formulario de registro de WP.
  • Los inicios de sesión a través de redes sociales no se registran automáticamente. Los plugins como Nextend Social Login eluden por completo el formulario de inicio de sesión de WordPress (callback de OAuth), por lo que no hay ningún envío $_POST que el detector pueda analizar. Consulta la sección dedicada de preguntas frecuentes más abajo para conocer las dos formas de gestionarlos.
  • Se registra cada casilla marcada, no solo la primera. Los formularios de registro suelen incluir una casilla obligatoria sobre privacidad y otra opcional sobre marketing o boletines informativos. Ambas se registran como registros independientes. La primera que se detecta conserva el tipo de flujo básico (wp_register, wc_register…), de modo que tus registros existentes y los filtros guardados siguen siendo comparables, y cada una adicional añade su nombre de campo, por ejemplo, wp_register_newsletter_consent. De esta forma, un consentimiento opcional para marketing, que es precisamente el tipo que un organismo regulador te pide que acredites por separado, nunca queda oculto por el obligatorio.
  • El texto almacenado consent_text procede de «Ajustes». Pega en «Texto de consentimiento para el acceso/registro» el texto exacto que ve el visitante en el formulario (tanto si procede de tu plugin del RGPD como de la casilla de verificación insertada), para que el registro refleje lo que realmente se mostró. Se permite el uso de HTML en ese campo, así que puedes incluir un enlace a tu política de privacidad. Si tus formularios no dicen todos lo mismo abre «Usar un texto diferente por formulario» que aparece más abajo y rellena solo los que sean diferentes. Todo lo que se deje en blanco se sustituirá por el texto general del sitio.
  • Crear una cuenta en la página de pago de WooCommerce no genera un registro del mismo. La casilla que se marca allí está relacionada con las condiciones del pedido, que ya se registran como terms_and_privacy para el propio pedido, por lo que contabilizarla de nuevo como consentimiento de registro añadiría a tu registro algo a lo que el comprador nunca ha dado su consentimiento. Si tu página de pago incluye una casilla de consentimiento independiente propia, esa sí se registra con normalidad.

¿Cómo puedo registrar el consentimiento de los inicios de sesión a través de redes sociales (Nextend Social Login y similares)?

No automáticamente, y eso es a propósito. Un inicio de sesión a través de redes sociales culmina con una respuesta de OAuth procedente de Google, Facebook o Apple en la que no se envía ningún formulario, por lo que no hay ninguna casilla marcada en ninguna parte de la solicitud. Un registro escrito ahí sería un registro de algo que nadie vio que hiciera el visitante, lo cual es justo lo contrario de para lo que sirve un registro de consentimiento.

Lo que puedes hacer es proporcionar al plugin el consentimiento que tu plugin de inicio de sesión a través de redes sociales ya haya recopilado. Activa la opción «Registrar también los registros creados mediante formularios de membresía, cursos o formularios de registro personalizados» en «Ajustes > Integraciones» (esa es la opción que cubre la creación de cuentas fuera de los formularios de WP y WooCommerce) y utiliza el filtro tccl_consent_detection_payload, que te permite proporcionar al detector una carga útil propia para un flujo específico:

add_filter( 'tccl_consent_detection_payload', function ( $payload, $context ) {
    if ( 'user_register' !== $context ) {
        return $payload; // Never touch the other flows.
    }
    // Read the acceptance wherever your social login plugin left it before
    // sending the visitor to the provider: a transient, a cookie, a session.
    if ( get_transient( 'my_social_consent' ) ) {
        $payload['privacy_consent'] = '1';
    }
    return $payload;
}, 10, 2 );

Hay dos cosas que debes tener en cuenta. La clave que añadas debe parecer un campo de consentimiento para el detector (cualquier nombre que contenga consent, privacy, terms, gdpr…) o aparecer en la lista «Nombres de campos de consentimiento personalizados». Además, $payload debe devolverse sin modificar en cualquier otro contexto, o se contaminará la detección de inicios de sesión, comentarios y todo lo demás que se ejecute en la misma solicitud.

Si tu plugin de inicio de sesión a través de redes sociales activa su propio gancho «after register» y prefieres crear el registro tú mismo, llama a tccl_save_consent() desde allí, exactamente igual que en el ejemplo de formulario personalizado que aparece más abajo.

¿Se registran automáticamente los consentimientos en los comentarios de WordPress?

Sí, por defecto. Solo se registran los comentarios en los que el visitante marca la casilla nativa «Guardar mi nombre, correo electrónico y sitio web…». Puedes desactivar esta opción en «Consentimientos > Ajustes > Integraciones» si tu sitio utiliza Disqus, Jetpack Comments o cualquier otro sistema de comentarios de terceros en el que no se muestre la casilla nativa.

Pero ten en cuenta qué es realmente esa casilla de selección: pide permiso para guardar una cookie para que el navegador recuerde al autor del comentario la próxima vez. Se trata de una preferencia de cookies relacionada con la ePrivacy, de la misma naturaleza que la casilla «Recuérdame» del formulario de acceso, y no es el consentimiento previsto en el artículo 7.1 del RGPD para el tratamiento del nombre y el correo electrónico que el autor del comentario te está facilitando. Para eso utiliza la opción independiente que se describe en la siguiente pregunta frecuente.

¿Cómo puedo registrar un consentimiento válido de privacidad para los comentarios y las reseñas de productos?

Abre «Registro de consentimientos > Ajustes > Integraciones» y marca la casilla «Añadir una casilla de consentimiento obligatoria al formulario de comentarios y registrar quién la acepta». A partir de ese momento:

  • En el formulario de comentarios aparece una casilla de verificación de privacidad, tanto para los visitantes que no han iniciado sesión como para los que sí lo han hecho.
  • Un comentario enviado sin marcar esta casilla se rechaza en el servidor, no solo en el navegador, por lo que no se puede eludir.
  • Cada aceptación se almacena como consent_type = comment_privacy, lo que permite diferenciarla claramente de la aceptación de la cookie comment_consent. Ambas pueden coexistir en el mismo comentario.
  • Las reseñas de productos de WooCommerce utilizan el mismo formulario de comentarios y los mismos ganchos, por lo que al activar la opción también se incluyen estas. No hay que configurar nada adicional para una tienda.

El texto está en «Texto de privacidad para los comentarios» y admite HTML, por lo que puedes incluir un enlace a tu política de privacidad. Lo que escribas ahí es lo que se almacenará con cada registro como el texto que el autor del comentario ha aceptado. Desactiva esta opción si ya utilizas un plugin de privacidad que añada su propia casilla de verificación al formulario de comentarios, ya que, de lo contrario, tus visitantes verán dos.

Mis usuarios se registran a través de MemberPress, LearnDash u otro plugin de membresía. ¿Se registran esas inscripciones?

Solo si activas la opción «Registrar también las inscripciones creadas con formularios de membresía, de cursos o de registro personalizados» en «Registro de consentimientos > Ajustes > Integraciones».

Las opciones de WordPress y WooCommerce mencionadas anteriormente enganchan los eventos que ambos activan en sus propios formularios. En cambio, un plugin de membresía, LMS o de registro personalizado crea la cuenta a través de la ruta genérica de creación de usuarios de WordPress, que esas opciones nunca detectan. Este ajuste añade una medida de seguridad a esa ruta genérica y almacena el registro como consent_type = user_register. Sigue siendo necesario marcar la casilla de consentimiento en el formulario de envío, exactamente igual que en cualquier otro flujo, y nunca registra una cuenta que crees tú mismo desde «Usuarios > Añadir nuevo», ya que allí no se da ningún consentimiento.

Está desactivada por defecto porque la mayoría de los sitios no la necesitan y porque los formularios de registro de esos plugins varían lo suficiente como para que sea recomendable comprobar el primer registro que genera antes de confiar en él.

¿Funciona con el bloque de finalizar compra de WooCommerce?

Sí, desde la versión 1.7.0. Se admiten ambos procesos de pago, y en la pantalla de ajuses se indica qué datos registrará tu propia página de finalizar compra.

Hay una diferencia que conviene tener en cuenta, ya que se trata de una limitación de WooCommerce y no de este plugin. La casilla de selección del bloque nativo de términos y condiciones solo se valida en el navegador y su valor nunca se envía al servidor, por lo que ningún plugin puede leerlo. Lo que registra el plugin depende de cómo esté configurado ese bloque:

  • Bloque con la casilla «Obligatorio» activada: Se registra como terms_and_privacy, el mismo tipo que utiliza el proceso de pago clásico. El pedido no se habría podido realizar sin marcar la casilla, por lo que la aceptación es segura, y el texto almacenado es la redacción exacta del bloque.
  • Bloque sin casilla de verificación (por defecto en WooCommerce): El bloque solo muestra un párrafo informativo, por lo que el comprador aceptó al continuar con el proceso, en lugar de realizar un acto afirmativo. Esto tiene relevancia contractual, pero no constituye el consentimiento explícito del artículo 7.1, por lo que se registra como terms_notice para mantener ambos conceptos separados en tu registro de evidencias.
  • No hay apartado de términos y condiciones en la página: No se registra nada de la compra, ya que no se mostró nada.

Si quieres que la validación la realice el propio servidor, activa la opción «Incluir casilla de verificación obligatoria» en «Ajustes > Bloque de finalizar compra». Esta opción añade su propia casilla de verificación obligatoria a través de la API oficial adicional-checkout-fields de WooCommerce, de modo que el valor se envía con la solicitud, se valida en el servidor y se almacena en el pedido. WooCommerce muestra esas etiquetas como texto sin formato, por lo que esa casilla de verificación no puede contener enlaces; mantén el bloque de términos y condiciones en la página para el texto enlazado.

¿Por qué mi bloque de finalizar compra registra «terms_notice» en vez de «terms_and_privacy»?

Debido a que el bloque de términos y condiciones no tiene casilla de selección, que es como lo incluye WooCommerce por defecto. Al cliente se le mostró una frase en la que se indicaba que continuar implicaba la aceptación, y nunca marcó ninguna casilla.

El plugin podría registrar eso como un consentimiento normal, pero eso supondría incluir en tu registro un acto afirmativo que nunca ocurrió, y un registro de consentimientos que exagera las pruebas es peor que uno que no lo hace.

No es el plugin el que te indica que tu tienda no cumple, y esta distinción no es una advertencia. El procesamiento de un pedido se basa en la ejecución del contrato (artículo 6.1.b del RGPD), no en el consentimiento, y la aceptación de las condiciones de venta al realizar el pedido tiene valor contractual por sí misma. Que se necesite además un acto afirmativo depende de lo que pidas a tus clientes que acepten, y esa decisión te corresponde a ti, no al plugin. Lo que hace el plugin es no registrar ambos elementos bajo el mismo nombre.

Si quieres que se marque explícitamente la casilla, activa la opción «Requerir casilla de verificación» en ese bloque del editor, o activa la casilla de selección insertada de los ajustes. Los registros ya almacenados como terms_notice conservan ese tipo, ya que reflejan con exactitud lo que esos clientes vieron realmente.

Mi sitio no está en inglés. ¿Coincidirá el registro con lo que leen mis clientes?

Solo si escribes tu propio texto en el apartado de términos y condiciones, que es lo que recomienda la pantalla de ajustes cuando detecta esta situación.

El motivo es una limitación relacionada con el lugar donde WooCommerce almacena ese texto. El texto por defecto del bloque se genera en JavaScript y sus traducciones están en los archivos de traducción de scripts de WooCommerce, que PHP no puede leer, por lo que ningún plugin puede recuperar la frase exacta que se le mostró a tu visitante. Por lo tanto, este plugin reproduce la misma frase bajo su propio dominio de texto. En inglés, ambas son la misma cadena. En cualquier otro idioma, el texto almacenado es la traducción de esa frase realizada por este plugin, que puede diferir palabra por palabra de la de WooCommerce.

Todo lo que escribas en el bloque se almacena tal cual, en cualquier idioma, sin que se realice ninguna traducción. En el caso de un registro de consentimiento, esa es la diferencia entre una transcripción y una reconstrucción, por lo que merece la pena dedicar esos dos minutos en el editor. Lo mismo se aplica a la casilla de selección insertada: su texto procede de tu propio ajuste.

La opción «Texto de la casilla de verificación de los términos» no funciona en mi proceso de pago. ¿Por qué?

Ese ajuste, y el texto informativo que aparece junto a él antes de finalizar la compra, solo se aplican al proceso de pago clásico. En el proceso de pago por bloques, el texto está en el bloque de términos y condiciones, que se edita en la propia página de pago.

Esto es a propósito. Esos registros almacenan lo que aparece en el bloque, no lo que introduces en los ajustes, ya que el objetivo del registro es demostrar lo que el cliente ha leído.

¿Dónde se almacenan los datos?

En una tabla indexada personalizada llamada wp_tccl_consents (con el prefijo de tu sitio). Cuando está activo WooCommerce, cada pedido también obtiene tres registros meta (_tccl_terms_accepted, _tccl_terms_version, _tccl_recorded_at) para que la pantalla de edición de pedidos pueda mostrar el resumen sin consultar la tabla.

¿Cómo puedo subir la versión del documento cuando cambie los términos y condiciones?

Edita el campo de versión en «Registro de consentimientos > Ajustes», o simplemente marca la casilla «Subir versión al guardar». El plugin también puede actualizarla automáticamente si detecta que el texto de la casilla ha cambiado, pero no el campo de versión.

Tres cosillas a recordar:

  1. La cadena de versión que aparece en los ajustes debe coincidir, carácter por carácter, con la etiqueta de versión de tu documento de términos (por ejemplo, 1.1-2026-05-17). Se trata de un identificador de texto libre y el plugin solo compara cadenas, por lo que un espacio al final o un separador diferente se considerarán una versión distinta.
  2. Cuando subes la versión todos los registros almacenados en la versión anterior se marcan automáticamente como «Obsoletos» en la lista de registros. Esto es así a propósito, ya que es el registro de auditoría del RGPD que muestra el texto exacto que cada interesado aceptó en ese momento. «Obsoletos» es una funcionalidad, no un error.
  3. NO borres ni «limpies» los registros antiguos. Constituyen la prueba legal del consentimiento para la versión que estaba en vigor cuando el interesado lo aceptó. Si el usuario rechaza los términos y, posteriormente, una autoridad reguladora solicita pruebas, esos registros son los que deberás presentar.

¿Cómo puedo borrar o anonimizar datos de un cliente específico?

Utiliza la pantalla nativa de WordPress «Herramientas > Borrar datos personales». El plugin registra una herramienta de borrado que anonimiza los registros vinculados al correo electrónico solicitado (no los borra, ya que el propio registro constituye base legal para conservar la prueba del consentimiento). También puedes anonimizar los registros filtrados desde la pestaña de registros.

¿Cómo puedo exportar el historial de consentimientos de un cliente?

Utiliza «Herramientas > Exportar datos personales». El plugin registra un exportador que devuelve todos los registros de consentimiento vinculados a la dirección de correo electrónico solicitada.

¿Una desinstalación borrará mis datos?

Solo si lo aceptas expresamente. La opción «Eliminar todos los datos al desinstalar» está desactivada por defecto. Aunque desinstales la aplicación por error, el registro de tu consentimiento se mantendrá.

Si necesitas limpiar unas cuantas filas de prueba que generaste al configurar el plugin (y aún no dispones de la próxima interfaz de usuario para el borrado por lotes), puedes eliminarlas con una instrucción SQL directa sobre la tabla de consentimientos, p. ej.:

DELETE FROM wp_tccl_consents WHERE id IN (1, 2, 3);

Sustituye wp_ por el prefijo de tabla real de tu sitio. Es una vía de escape para una limpieza legítima tras un formulario mal configurado; pero no es un flujo recomendado para el día a día. Para gestionar solicitudes reales de los interesados, utiliza en su lugar «Herramientas > Borrar datos personales» (anonimiza).

¿Cómo puedo recopilar los consentimientos de Elementor Forms, Forminator o de cualquier otro origen?

Contact Form 7, WPForms, Gravity Forms y Fluent Forms se registran automáticamente en cuanto actives su opción en «Ajustes > Integraciones» sin que sea necesario escribir código para estos cuatro. Para cualquier otra fuente llama a la función pública tccl_save_consent() desde el gancho de envío de ese plugin. Lee siempre la versión del documento desde los ajustes del plugin (tccl_get_setting( 'consent_version', '1.0' )) para que todos los registros coincidan con la versión actual de los ajustes. Si introduces una fecha fija que difiera de la de los ajustes, todos los registros se marcarán como «Obsoletos» para siempre.

add_action( 'the_submission_hook_of_your_form_plugin', function ( $submission ) {
    tccl_save_consent( array(
        'email'           => sanitize_email( $submission['email'] ), // however your plugin exposes the email
        'consent_type'    => 'my_custom_form',
        'consent_version' => tccl_get_setting( 'consent_version', '1.0' ),
        'consent_text'    => 'I have read and agree to the privacy policy.',
        'consent_value'   => 1,
    ) );
} );

Ganchos habituales a los que se puede adaptar esto: elementor_pro/forms/new_record, forminator_custom_form_after_submission, user_register. Adapta la firma de la función de retorno y la forma de leer el correo electrónico y la aceptación a los argumentos documentados de cada plugin.

¿Funciona la detección de IPs detrás de Cloudflare u otros proxies inversos?

El plugin lee únicamente REMOTE_ADDR y no confía en las cabeceras reenviadas, ya que estas pueden falsificarse sin un proxy verificado. Si tu proveedor de alojamiento incluye la IP del proxy en REMOTE_ADDR en lugar de la IP real del cliente, todas las entradas registrarán la IP del proxy. La mayoría de los proveedores de alojamiento compatibles con WordPress transmiten la IP real correctamente.

¿Qué significa «A prueba de manipulaciones» en este contexto?

Cuando se registra un consentimiento, el plugin genera un hash SHA-256 del texto exacto aceptado y lo almacena junto con el registro. Cada vez que se consulta, el hash almacenado se compara con uno recién generado, y cualquier diferencia se muestra como ALTERADO en la lista de registros, el metabox de pedidos y la vista de certificados. Se trata de una comprobación de integridad criptográfica, no de una firma electrónica.

¿El certificado es un PDF real?

El plugin muestra una versión en A4 de una sola página con CSS optimizado para impresión y un botón «Imprimir / Guardar como PDF». Los navegadores modernos (Chrome, Safari, Firefox, Edge) exportan esa visualización a un PDF real de forma nativa, con la misma fidelidad que ofrecería una librería en el servidor, y con la ventaja añadida de que respeta el idioma y las fuentes de tu sitio web. No incluye ninguna librería externa, por lo que el plugin sigue siendo ligero.

Aclaraciones: El plugin NO almacena ningún archivo PDF en el disco y NO crea una carpeta de archivos subidos propia. El certificado se genera bajo demanda en formato HTML cada vez que lo abres, y solo se convierte en un PDF si tú (o el cliente) haces clic en «Imprimir / Guardar como PDF» en el navegador. No hay nada que limpiar en el servidor. Si el sitio tiene un icono definido en «Ajustes > Generales» (el mismo bloque de opciones que comparten los temas de bloques y los temas clásicos), este se muestra en la cabecera del certificado junto al nombre del sitio, incluso en los certificados de consentimiento registrados antes de esta versión, ya que el icono se añade en el momento de la visualización, no en el momento del almacenamiento.

Reseñas

20 de mayo de 2026 1 respuesta
Excelente plugin gratuito para tratar el RGPD que está integrado para funcionar con woocommerce y los principales plugins de formularios.Pensado en no afectar en el rendimiento no generando un PDF por cada consentimiento firmado.
Leer todas las 2 reseñas

Colaboradores y desarrolladores

«Registro de consentimientos de términos y condiciones» es un software de código abierto. Las siguientes personas han colaborado con este plugin.

Colaboradores

«Registro de consentimientos de términos y condiciones» está traducido en 1 idioma. Gracias a los traductores por sus contribuciones.

Traduce «Registro de consentimientos de términos y condiciones» a tu idioma.

¿Interesado en el desarrollo?

Revisa el código , echa un vistazo al repositorio SVN o suscríbete al registro de desarrollo por RSS.

Registro de cambios

1.7.2

  • Mejorado: Contact Form 7, WPForms, Gravity Forms y Fluent Forms ahora recurren a la dirección de correo electrónico que figura en el perfil del usuario que ha iniciado sesión cuando el formulario en sí no incluye ningún campo de correo electrónico, en lugar de descartar el consentimiento. Los formularios de registro e inscripción que requieren iniciar sesión se registran como cualquier otro. Se sigue omitiendo el envío anónimo a un formulario sin campo de correo electrónico, ya que un registro que no puede atribuirse a nadie no constituye prueba de nada.
  • Mejorado: Fluent Forms registra la URL de la página incluso cuando la cabecera Referer nunca llegue al servidor, algo que pasa con algunos proxies y con políticas de referral más estrictas. En ese caso, recurre al referral que el propio Fluent Forms incluye en el envío.
  • Mejorado: Probado hasta WooCommerce 11.0
  • Corrección: La integración con Fluent Forms nunca registró ni un solo consentimiento desde que se añadió en la versión 1.5.0. Leía la estructura del formulario a partir de una propiedad que el modelo de formulario de Fluent Forms no tiene, por lo que cada envío se descartaba antes incluso de que se tuvieran en cuenta los campos de consentimiento, independientemente del formulario o de los ajustes. Ahora se recogen los campos marcados de «Aceptación del RGPD» y «Términos y condiciones», tal y como se indica en la documentación. Informado en el foro de soporte.

1.7.1

  • Mejorado: La verificación de integridad ahora se ejecuta automáticamente una vez al día y te avisa en la administración. La verificación de registros no es algo nuevo, pero hasta ahora solo se realizaba cuando alguien pulsaba «Verificar integridad» o abría el registro, por lo que un registro cuyo texto almacenado hubiera sido manipulado podía permanecer ahí durante meses sin que se viera la etiqueta de ALTERADO. Ahora, cada día se realiza una comprobación programada que revisa todos los registros y, si alguno de ellos ya no coincide con el texto que se selló con él, aparecerá una alerta en el panel de administración hasta que la revises. Al ejecutar «Verificar integridad» manualmente se actualiza el mismo estado, por lo que la alerta desaparece en cuanto se resuelve la situación.
  • Mejorado: La casilla de privacidad de los comentarios y las reseñas de productos ahora se muestra en la misma fila que la de registro. La casilla mantiene un tamaño uniforme y el texto largo se ajusta alineado con el resto del texto, en lugar de aparecer debajo de la casilla.
  • Mejorado: Nueva pregunta frecuente sobre cómo registrar el consentimiento de los inicios de sesión a través de redes sociales, como Nextend Social Login, que llegan mediante una llamada de retorno de OAuth sin que haya que inspeccionar ningún envío de formulario, utilizando el filtro tccl_consent_detection_payload.
  • Corrección: La casilla de consentimiento que el plugin puede añadir al formulario de registro de WooCommerce resultaba prácticamente invisible con Astra (el tema más instalado) cuando su extensión premium estaba activa. Astra elimina el estilo nativo de todas las casillas de verificación de un formulario de WooCommerce y solo devuelve el tamaño a aquellas que el propio WooCommerce muestra, lo que hacía que esta quedara reducida a un punto de 2 píxeles o, una vez marcada, a un rectángulo azul alargado. Ahora, la casilla de verificación tiene su propio recuadro y su propia alineación, mientras que los colores y la marca de verificación siguen procediendo del tema, por lo que tiene un aspecto nativo en todos los temas probados.

1.7.0

  • Nuevo: Compatibilidad con el bloque de pago de WooCommerce, que es el por defecto para las tiendas nuevas desde la versión 8.3. Estos pedidos pasan por la API de la tienda y nunca activan los ganchos clásicos de pago, por lo que, hasta ahora, una compra en una tienda WooCommerce estándar no generaba ningún registro. Ahora cada pedido se registra con el texto exacto del bloque de términos y condiciones, que es, literalmente, lo que ha leído el comprador. Cuando ese bloque requiere marcar una casilla, el registro es de tipo terms_and_privacy, idéntico al del pago clásico, ya que el pedido no podría existir sin que se marcara dicha casilla. Cuando el bloque solo muestra el párrafo informativo que WooCommerce incluye por defecto, el registro es de tipo terms_notice: el comprador aceptó al continuar, lo cual tiene relevancia contractual, pero no constituye el acto afirmativo que exige el artículo 7.1, y un registro de consentimiento no debe confundir ambos conceptos. La pantalla de ajustes lee tu propia página de pago y te indica cuál de estos casos se aplica a tu tienda.
  • Nuevo: Casilla de verificación opcional de consentimiento obligatorio para el bloque de finalizar compra, desactivada por defecto. La casilla de verificación del bloque nativo de términos y condiciones solo se valida en el navegador y su valor nunca llega al servidor, por lo que ningún plugin puede comprobar en el servidor que se haya marcado. Esta opción registra una casilla de selección propia a través de la API oficial additional-checkout-fields de WooCommerce. El valor se envía junto con la solicitud, WooCommerce lo valida en el servidor y rechaza el pedido si falta, y se almacena en el pedido. Se omite automáticamente, en lugar de aplicarse, si el bloque que la mostraría no aparece en tu página de finalizar compra, ya que un campo obligatorio que el cliente no pueda ver rechazaría todos los pedidos.

Para entradas anteriores del registro de cambios revisa el archivo changelog.txt.