Trucos, hacks y hooks para GDPR Cookie Compliance

¿De qué hablamos hoy?

Volvemos a la carga por el blog a hablar de GDPR Cookie Compliance para WordPress, uno de los mejores plugins gratuitos del repositorio para cumplir el RGPD en materia de cookies.

En las últimas semanas he podido contrastar un par de intuiciones que me rondaban la cabeza con este plugin:

  • Cada vez más desarrolladores e implementadores utilizan GDPR Cookie Compliance en sus páginas web. 
  • No soy el único al que le parece uno de esos plugins que son excelentes… pero que tienen una documentación desastrosa.

Sí, las dos cosas las he comprobado después de ver cómo aumentan las consultas que nos llegan sobre cómo implementar X cosa con GDPR Cookie Compliance.

Así que en este artículo vamos a ver una serie de trucos y hacks para este plugin utilizando los hooks disponibles en GDPR Cookie Compliance.

¿Qué son los hooks de un plugin en WordPress? ¿Para qué sirven?

Sin entrar en detalles, que luego me lío: los hooks son una herramienta fundamental dentro del desarrollo en WordPress.

Hay dos tipos de hooks: actions y filters. Y son posiciones dentro del código fuente que nos permiten ejecutar código personalizado.

Así, simplificado al máximo.

Un plugin bien desarrollado incluirá ciertos hooks para que los desarrolladores puedan ampliar su funcionalidades sin tener que “romper” el plugin o tener que hacerse una versión alternativa.

Y GDPR Cookie Compliance cuenta con varios hooks disponibles.

¿Dónde está la documentación de GDPR Cookie Compliance?

¡La gran pregunta!

Lo más lógico sería encontrar la documentación de GDPR Cookie Compliance en su página web. O incluso en la página de descarga del plugin en el repositorio de WordPress.

Pero no 🙁

Para ver la documentación de GDPR Cookie Compliance te toca:

  1. Instalar el plugin
  2. Irte a sus ajustes.
  3. Ver una sección llamada “Ayuda, ganchos, filtros y shortcodes”
  4. Y después visitar las dos pestañas de “Ganchos por defecto” y “Ganchos premium”.
documentacion-gdpr-cookie-compliance
Documentación “escondida” de GDPR Cookie Compliance.

Básicamente, lo que tienes por ahí es lo que vamos a ver en este artículo.

Te lo digo por si prefieres verlo con una traducción regulera y perderte mis comentarios molones…

¿Te quedas? Gracias. Pues vamos a seguir.

Cómo enlazar la pantalla de ajustes de cookies desde cualquier sitio

Además del banner de cookies, GDPR Cookie Compliance tiene una página de ajustes de cookies (como manda el RGPD) que tiene esta pinta:

modal-gdpr-cookie-compliance

Por lo general, abrimos esa ventana modal desde el propio banner.

Pero si añades esta url en cualquier enlace de tu web (por ejemplo, en la página de política de cookies) también puedes abrir ese popup de ajustes:

/#gdpr_cookie_modal

Añadir scripts personalizados en GDPR Cookie Compliance con PHP cuando se acepten las cookies

Hay ocasiones en las que necesitamos condicionar la carga de ciertos scripts a la aceptación de cookies.

Pero son scripts que no podemos extraer y colocar en los ajustes de GDPR Cookie Compliance.

Así que la solución pasa por implementarlos de manera condicional con estos hooks:

  • Para cookies de terceros:
    • En el head: moove_gdpr_third_party_header_assets
    • En el body: moove_gdpr_third_party_body_assets
    • En el footer: moove_gdpr_third_party_footer_assets
  • Para cookies adicionales:
    • En el head: moove_gdpr_advanced_cookies_header_assets
    • En el body: moove_gdpr_advanced_cookies_body_assets
    • En el footer: moove_gdpr_advanced_cookies_footer_assets

Un ejemplo:

add_action('moove_gdpr_third_party_header_assets','moove_gdpr_third_party_header_assets');
function moove_gdpr_third_party_header_assets( $scripts ) {
  $scripts .= '<script>console.log("third-party-head");</script>';
  return $scripts;
}

Con este código, estaríamos añadiendo ese script para que se active dentro del <head> de la web solo cuando el usuario haya aceptado las cookies de terceros.

Forzar la recarga de página cuando el usuario acepte las cookies

Una de las cosas que más me gustan de GDPR Cookie Compliance es que, para integraciones sencillas se puede implementar todo sin tener que recargar la página.

Esto ayuda para tener métricas más limpias en Google Analytics (otra historia larga sobre atribución que, si te interesa, vemos en otro post).

¿El problema? Cuando queremos hacer alguna integración más compleja, como en los casos del ejemplo anterior, necesitamos que se recargue la página para que se carguen nuestros nuevos scripts.

Para conseguirlo, GDPR Cookie Compliance tiene este hook:

add_action( 'gdpr_force_reload', '__return_true' );

Borrar la caché de scripts de GDPR Cookie Compliance

Hablando hace unos días con Nahuai Badiola sobre este plugin y lo escondidos que están sus shortcodes… descubrí una cosa nueva:

GPDR Cookie Compliance tiene una caché de scripts propia.

Y si haces cambios en el código, a veces no se cargan.

La solución pasa por añadir este pequeño código:

add_filter('gdpr_cookie_script_cache','gdpr_prevent_script_cache');
function gdpr_prevent_script_cache() {
  return array();
}

Bueno, a Nahuai le siguió dando algunos problemillas aún después de borrar caché… espero que los pudiera resolve :D.

(Como estoy casi seguro que se lee este post de los primeros – ¡Hola, Nahuai!👋 luego verás su respuesta en los comentarios ajajaja).

Comprobar si se han aceptado las cookies (por PHP)

Otro truco útil y sencillo de implementar.

Si necesitamos comprobar en cualquier punto de nuestro código (PHP) si el usuario ha aceptado o no cierto tipo de cookies, podemos usar estas funciones:

if ( function_exists( 'gdpr_cookie_is_accepted' ) ) {
  /* supported types: 'strict', 'thirdparty', 'advanced' */
  if ( gdpr_cookie_is_accepted( 'thirdparty' ) ) {
    echo "GDPR third party ENABLED content";
  } else {
    echo "GDPR third party RESTRICTED content";
  }
}

Mejorar estilos en GDPR Cookie Compliance

Hace unos días hablábamos de cómo hacer más visible el banner de GDPR Cookie Compliance para mejorar la aceptación de los usuarios.

En la misma línea, te dejo 3 hooks disponibles para ampliar los estilos del banner:

Añadir nuevo CSS

Si quieres añadir nuevos estilos (y no quieres sobreescribirlos desde tu hoja de estilos CSS), puedes utilizar este hook:

add_action('moove_gdpr_inline_styles','gdpr_cookie_css_extension',10,3);
function gdpr_cookie_css_extension( $styles, $primary, $secondary ) {
  $styles .= '#main-header { z-index: 999; }';
  $styles .= '#top-header { z-index: 1000 }';
  $styles .= '.lity {z-index: 99999999;}';
  return $styles;
}

Configurar z-index banner GDPR Cookie Compliance

Por defecto, el banner de GDPR Cookie Compliance tiene un z-index bastante alto. Pero me he encontrado con herramientas o plugins que aún así quieren quedarse por encima.

Puedes añadir este snippet para subirlo más aún:

add_action('moove_gdpr_inline_styles','gdpr_cookie_css_extension_zindex',10,3);
function gdpr_cookie_css_extension_zindex( $styles, $primary, $secondary ) {
  $styles .= '#moove_gdpr_cookie_info_bar { z-index: 99999999; }';
  $styles .= '.lity { z-index: 999999999; }';
  return $styles;
}

Personalizar estilo de los botones

En una de las últimas actualizaciones de GDPR Cookie Compliance añadieron también un hook específico para los estilos de los botones.

Puedes usarlo con este código:

add_action('gdpr_custom_button_styles','gdpr_custom_button_styles',10,1);
function gdpr_custom_button_styles( $css ) {
  $css = 'border-radius: 5px;';
  return $css;
}

Cómo configurar GDPR Cookie Compliance con Monster Insights

Aunque Monster Insights es uno de los plugins (con permiso de JetPack) que más odio de todo el repositorio de WordPress, no puedo negar la evidencia: es un plugin que mucha gente utiliza y le resulta útil.

Si no quieres prescindir de él, puedes incluir este código para hacer que sea compatible y cumplir el RGPD con Monster Insights:

add_action( 'init', 'toggle_monster_insights_based_on_moove' );
function toggle_monster_insights_based_on_moove() {
  if ( function_exists( gdpr_cookie_is_accepted ) && function_exists('monsterinsights_get_ua')) {
    if ( gdpr_cookie_is_accepted('thirdparty') ) {
      setCookie( 'ga-disable-'.monsterinsights_get_ua(), 'false' );
    } else {
      setCookie( 'ga-disable-'.monsterinsights_get_ua(), 'true' );
    }
  }
}

Cómo configurar GDPR Cookie Compliance con Pixel Your Site

Con el píxel de Facebook me ocurre más o menos lo mismo que con analytics: prefiero incluirlo de manera nativa o a través de Google Tag Manager.

Si tú utilizas el plugin Pixel Your Site y quieres cumplir el RGPD, puedes usar este código:

add_filter( 'pys_disable_by_gdpr', 'gdpr_cookie_compliance_pys' );
function gdpr_cookie_compliance_pys() {
  if ( function_exists( 'gdpr_cookie_is_accepted' ) ) :
  $disable_pys = gdpr_cookie_is_accepted( 'thirdparty' ) ? false : true;
  return $disable_pys;
  endif;
  return true;
}
add_action( 'gdpr_force_reload', '__return_true' );

Cómo configurar GDPR Cookie Compliance con WooCommerce Facebook Pixel

Y para el caso de tiendas online que usen WooCommerce Facebook Pixel, tenemos otro código disponible también:

add_filter('facebook_for_woocommerce_integration_pixel_enabled', 'gdpr_cookie_facebook_wc', 20);
function gdpr_cookie_facebook_wc() {
  $enable_fb_wc = true;
  if ( function_exists( 'gdpr_cookie_is_accepted' ) ) :
  $enable_fb_wc = gdpr_cookie_is_accepted( 'thirdparty' );
  endif;
  return $enable_fb_wc;
}
add_action( 'gdpr_force_reload', '__return_true' );

Evitar la carga por AJAX de scripts

Por defecto, GDPR Cookie Compliance hace una carga “silenciosa” de los scripts cuando el usuario ha aceptado las cookies.

Lo hace usando AJAX, lo que puede en ocasiones suponer una carga alta para el servidor.

Si te soy sincero, a mí no se me ha dado el caso nunca.

Si es tu caso y prefieres desactivar AJAX, prueba este código:

add_action( 'gdpr_cc_prevent_ajax_script_inject', '__return_true' );

NOTA: si desactivas AJAX, también deberías borrar la caché del plugin y forzar la recarga. Revisa los puntos anteriores para usar también esos snippets.

Códigos de seguimiento personalizado en sitios multilenguaje

Un problema que sí me han reportado alguna vez en webs multidioma: necesitas implementar scripts diferentes según el idioma.

Aquí ya hablamos de código más avanzado. Necesitarás manejarte con PHP para implementarlo adecuadamente.

Te dejo un ejemplo para una web con WPML:

// The SCRIPT caching should be disabled if you have separate scripts / site!
add_filter('gdpr_cookie_script_cache','gdpr_prevent_script_cache');
function gdpr_prevent_script_cache() {
  return array();
}
// Force reload required because of PHP functions
add_action( 'gdpr_force_reload', '__return_true' );
// Custom Scripts based on front-end language
add_action('wp_head', 'my_gdpr_script_inject' );
function my_gdpr_script_inject() {
  // PHP Cookie checker, replace the 'thirdparty' to 'advanced' if you need to load the scripts for "Advanced cookies"
  if ( function_exists( 'gdpr_cookie_is_accepted' ) && gdpr_cookie_is_accepted( 'thirdparty' ) ) :
  $gdpr_default_content 	= new Moove_GDPR_Content();
  $wpml_lang      		= $gdpr_default_content->moove_gdpr_get_wpml_lang();
  // Variable named $wpml_lang returns the localization string
  if ( $wpml_lang === 'fr' ) : 
  // Custom Script to FR site only
  echo "<script>console.log('French - Custom Script Added');</script>";
  elseif( $wpml_lang === 'en' ) :
  // Custom Script to EN site only
  echo "<script>console.log('English - Custom Script Added');</script>";
  endif;

Desactivar comentarios hasta que no se hayan aceptado las cookies

La parte de comentarios de WordPress no debería cargar ninguna cookie que necesitara el consentimiento del usuario.

Pero si, por alguna razón, fuera tu caso, podrías implementar este código para desactivar la zona de comentarios en WordPress hasta que el usuario acepte las cookies:

// Force reload required because of PHP functions
add_action( 'gdpr_force_reload', '__return_true' );
// Custom Scripts based on front-end language
add_action('comments_open', function( $comments_open ){
  if ( function_exists( 'gdpr_cookie_is_accepted' ) ) :
  // supported types: 'strict', 'thirdparty', 'advanced' 
  if ( gdpr_cookie_is_accepted( 'thirdparty' ) ) :
  return $comments_open;
  else :
  return false;
  endif;
  endif;
  return $comments_open;
});

Preguntas frecuentes sobre GDPR Cookie Compliance

Me he dejado algunos hooks por el camino para que esto no se hiciera eterno (y porque no eran muy relevantes realmente XD).

Pero sí me dejo un pequeño hueco para resolver otras dudas frecuentes que me llegan con GDPR Cookie Compliance:

¿Dónde tengo que añadir estos hooks?

Como cualquier código personalizado en WordPress, lo ideal es aplicarlo en el fichero functions.php de tu tema hijo o, mejor aún, en un plugin personalizado de funcionalidades en el que puedas ir recopilando estos snippets.

También hay algunos plugins como Code Snippets (no soy muy fan) que te permite simplificar el proceso.

He puesto el código de Analytics pero no lo veo en mi código fuente… ¿es normal?

Correcto. Es lo normal, ya que GDPR Cookie Compliance carga los scripts por AJAX de manera dinámica cuando el usuario acepta las cookies.

¿Tengo que quitar el código de Analytics de otros sitios?

Sí, esa es la clave de este plugin: tienes que eliminar cualquier referencia a cookies que tengas por tu web y cargar los scripts en los ajustes de GDPR Cookie Compliance.

¿Instalar este plugin me hace cumplir el RGPD?

¡No! Por desgracia, no existen varitas mágicas ni plugins milagrosos.

GDPR Cookie Compliance sigue siendo uno de los mejores plugins de cookies para WordPress, pero necesita de trabajo y conocimientos para configurarlo correctamente.

Además, el RGPD es un tema mucho más extenso que el banner de cookies 😉

Aprende a dominar GDPR Cookie Compliance y el RGPD de WordPress

Si has llegado hasta aquí, enhorabuena (y gracias). Me encanta conocer gente a la que le interese el RGPD para WordPress.

Después de todo esto, me veo en la obligación de comentarte que, si quieres conocer al detalle cómo configurar este plugin de cookies y manejar con soltura el resto de secretos del RGPD para WordPress, Marina y yo tenemos un curso.

Se llama Juan Palomo RGPD y lo tienes aquí.

Darle a un cliente la tranquilidad de manejar estos asuntos técnico/legales, está muy bien visto.

Palabrita de técnico RGPD.

4 respuestas

  1. ¡Aupa, Santy!

    Gran (y necesario) artículo. 👏

    Pues al final he solucionado el problema en gran parte a tu ayuda, porque los puñeteros (creadores del plugin) tienen una documentación regular (por ser generoso) y estaba usando un snippet con un condicional como proponen en su página:
    https://wordpress.org/support/topic/activate-3rd-party-cookies-on-specific-article-page/

    Es decir, el snippet que proponen usando el hook:

    add_action('moove_gdpr_third_party_header_assets','moove_gdpr_third_party_header_assets');

    no funciona.
    It’s a trap!!
    La madre que los trajo.

    Si queréis cargar un script en una página en particular tenéis que usar la función gdpr_cookie_is_accepted más el condicional de vuestra página y engancharlo al un hook de WordPress (el footer si queréis que se ejecute más tarde).

    Gracias Santy por echarme una mano y poner un poco de orden con estos temas. 😉

    Un abrazo.

    1. Gracias a ti, Nahuai!

      Definitivamente… son un auténtico desastre con la documentación (y un poquito con el soporte también, todo sea dicho).

      Me alegra ver que lo has conseguido solucionar 😀

  2. Me parece muy interesante y a la vez dificil ejejej. en realidad me gustaria bloquear los script de google adsense hasta que acepten las cookies, pero nose por donde meter mano.
    he intentando algo simple con el hook que planteas para simplemente cambiar el boton por css pero ni eso me sale, lo he puesto en el function.php, he creado un php de prueba en la carpeta de plugin activando el plugin. pero no consigo que surja efecto, y eso que modifiqué el radio de 5 que esta en la prueba a 500 para que se vea bien.
    así que mucho menos sabria hacer como bloquear el script hasta que acepten las cookies. me podrías horientar por donde empezar para colocarlo?

    ¿donde tendria que colocar el código?:

    add_action(‘moove_gdpr_third_party_header_assets’,’moove_gdpr_third_party_header_assets’);
    …….
    …….

    y luego despues de colocarlo tendria que sustituir donde pone console.log por todo el script de google adsense? gracias

    1. Hola, Ángel! Gracias por comentar 😉

      Tengo que confesar que sí: lo que comentamos en este artículo es algo complejo de implementar.

      En principio, el código lo podrías implementar tanto en el functions.php de tu child theme como en un plugin que tengas para utilidades.

      Revisa que no tengas activados plugin de caché o similares que hagan que no se vea la última versión.

      El cambio de los estilos de botones, de hecho, debería verse en el código fuente de la web ya que ese filtro se aplica en los estilos inline que saca el plugin en el header.

      Con respecto al bloqueo de Adsense… ojo que ahí la cosa se complica bastante más. Tendrías que poner el condicional en cada bloque de anuncios para evitar la carga de los scripts.

      Te recomendaría echar un ojo a GDPR Cookie Consent en su versión de pago: incluye un bloqueador automático de scripts como el de Adsense.

      O también podrías mirar algún SaaS como Cookiebot, que también tiene un bloqueador automático.

      Un saludo!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

  • Responsable: SANTIAGO ALONSO POSADAS         
  • Finalidad: Moderar y responder comentarios de usuarios.
  • Derechos: Podrás ejercer tus derechos de acceso, rectificación, limitación y suprimir los datos en este formulario  así como el derecho a presentar una reclamación ante una autoridad de control.
  • Información adicional: En la Política de Privacidad de Técnico RGPD encontrarás información adicional sobre la recopilación y el uso de su información personal por parte de Técnico RGPD, incluida información sobre acceso, conservación, rectificación, eliminación, seguridad y otros temas.

¿Quieres saber más?

Envíanos tu consulta y nos pondremos en contacto contigo lo antes posible 👇🏻👇🏻👇🏻

  • Responsable: SANTIAGO ALONSO POSADAS         
  • Finalidad: Enviarte novedades sobre el curso, productos ofrecidos y contenidos de interés
  • Derechos: Podrás ejercer tus derechos de acceso, rectificación, limitación y suprimir los datos en este formulario  así como el derecho a presentar una reclamación ante una autoridad de control.
  • Información adicional: En la Política de Privacidad de Técnico RGPD encontrarás información adicional sobre la recopilación y el uso de su información personal por parte de Técnico RGPD, incluida información sobre acceso, conservación, rectificación, eliminación, seguridad y otros temas.