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:
- Instalar el plugin
- Irte a sus ajustes.
- Ver una sección llamada “Ayuda, ganchos, filtros y shortcodes”
- Y después visitar las dos pestañas de “Ganchos por defecto” y “Ganchos premium”.
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:
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.
20 respuestas
¡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.
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 😀
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
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!
Muchas gracias! Gran post! 😀 Me ha sido súper útil.
Me alegro mucho, Victoria! Gracias a ti por dejar tu comentario 😉
El código este se puede implementar también en el css persnoalizador de wordpress?
add_filter(‘gdpr_cookie_script_cache’,’gdpr_prevent_script_cache’);
function gdpr_prevent_script_cache() {
return array();
}
gracias 🙂
Hola, María!
No, eso es código php, no CSS. Para implementarlo necesitarás ponerlo en el functions.php de tu tema (con mucho cuidado) o utilizando un plugin como Code Snippets: https://es.wordpress.org/plugins/code-snippets/
Un saludo!
¡Qué pasa, Santiago!
¿Estos truquis y hooks funcionan con plugins de caché? Tengo entendido que estos plugins cachean el diseño de la página y que, aunque pases por el functions.php para cargar nuevos scripts en función de páginas y/o casuísticas raras… al estar la página cacheada.. estos hooks no funcionarían porque el plugin de caché te sirve la versión que tiene en caché y no deja “escribir nuevos scripts”.
¿Hay que cargar los códigos, entonces, usando wp-ajax?
¡Gracias!
Hola, Marcos!
Efectivamente, los trucos que llevan código PHP hay que usarlos con sumo cuidado, sobre todo los condicionales por categorías de cookies porque pueden (y dan) problemas con los plugins de caché.
Gracias por comentar!
Hola Santiago,
Tengo una pregunta tras leer tu artículo.
Hay alguna opción de deshabilitar la recarga automática tras la aceptación y que no añada ?cn-reloaded=1 en la URL? Porque he probado a desactivarlo, pero en mi caso es una página sola y no carga el script de Tag Manager (con Analytics). Por lo que no me registra la visita.
Gracias!
Un saludo!
Hola, José Ángel!
¿Seguro que estamos hablando del mismo plugin? Esa cadena que comentas al final de la url y la recarga de la página… me suena que es el comportamiento de Cookie Notice, que es un plugin que no me gusta nada y con el que resulta bastante complejo cumplir la normativa.
El plugin que comentamos aquí es GDPR Cookie Compliance y, en principio, no necesitas activar la recarga para que se cargue bien el código de Analytics.
Un saludo y gracias por comentar!
Buenas!
En mi caso tengo un problema que no consigo solucionar, ya que me genera muchos problemas el uso del GDPR Cookie Compliance con el plugin de Google Tag Mannager. La problemática es la siguiente:
– El plugin GDPR me es necesario no sólo para cumplir la política, si no por que es el único con el que puedo cumplir ciertas funcionalidades que me son necesarias y que sólo me da este plugin (Que conozca)
– El plugin de GTM4WP es el mismo caso, lo necesito en algunos casos para usar los eventos personalizados en GTM que sólo proporciona este plugin (Va más allá que la simple implementación de la etiqueta de GTM)
La cuestión, que no sé como hacer para combinar ambos plugin, y poder decirle al plugin de GTM que no cargue su script hasta que no se acepten las cookies de forma predeterminada.
Una de mis posibles soluciones era la de comprobar por PHP si se han aceptado y ahí cargar el script del plugin de GTM (Sacado de su documentación) pero parece que esto no funciona.
¿Sabría orientarme sobre alguna solución?
Mil gracias de antemano!
Hola, Irene! Gracias por tu comentario.
Efectivamente, la combinación entre GDPR Cookie Compliance es un tema delicado. De hecho, en el curso de RGPD para WordPress (https://tecnicorgpd.com/cursos-rgpd/juan-palomo/) tenemos un taller de más de 1h tratando este tema con distintas aproximaciones.
Básicamente las opciones que tienes son cargar el código de GTM desde el plugin de cookies y usar el plugin de GTM solo para su DataLayer o cargar GTM normal (por defecto, GTM no usa cookies) y controlar si han aceptado o no las cookies con disparadores personalizados desde GTM.
Otra alternativa sería pasar de GDPR Cookie Compliance y tirar por Complianz, por ejemplo. Que tiene un autobloqueador de cookies que te puede ayudar bastante en este caso.
Un saludo!
Hola!
Lo primero, felicitarte por este pos, que me da esperanza de solucionar mi problema. Veo que dominas de sobra este plugin. He probado muchos y Complianz es el que más me gusta.
Pero por alguna razón, después de más de un año, hace un par de días ha dejado de funcionar: NO SE MUESTRA EL BANNER DE COOKIES (aunque sí bloquea la carga de cookies). No lo achaco a nada en concreto (incompatibilidad con nuevos plugins instalados, etc.). Pero claro, mis conocimientos son básicos. De hecho, algunas cosas que leo aquí me suenan a chino ^^-
Estoy desesperadita, tirando horas para solucionarlo (incluyendo reinstalar de cero el plugin) pero sin éxito.
He leído esto https://complianz.io/cookie-banner-does-not-appear/ pero no me ha solucionado nada.
¿Me podrías arrojar algo de luz? Esta es la web https://www.singlutensalud.com/
Muchas gracias!
Hola! Yo te recomendaría revisar si es algún problema con plugins de caché o similares. Tengo Complianz instalado en bastantes webs y no he notado ningún comportamiento extraño últimamente.
Así que lo achacaría a algo así. Prueba a desactivar el plugin de caché y comprobar si se corrige, para ir descartando problemas.
Un saludo!
Hola! Excelente artículo, te deberían regalar una caja de vinos la gente del plugin 😉
Sabeis si hay alguna manera de ejecutar –en algun hook mediante una función creada por mi– la aceptación de las cookies necesarias, las de terceros y las adicionales? Así selectivamente?
Me piden crear en una página de “panel de control de cookies” un acceso directo a la aceptación de estas cookies… La verdad estoy pensando que lo más fácil es llamar de nuevo al popup (tal y como explicas en este post) pero pensé que igual mediante un formulario hecho por mi puedo ejecutar selectivamente aceptar/borrar las cookies.
Gracias!
Hola, Miguel! Gracias por tus palabras 😀
No llego a entender del todo bien qué es lo que necesitas… ¿no te valen las opciones del plugin para aceptar/rechazar/personalizar? Creo que eso y el enlace que puedes añadir al pie para “volver a abrir” el panel de configuración debería ser suficientes.
Un saludo!
Hola, muchas gracias por el artículo es genial!, pero…
Estoy intentando crear un enlace para que se muestre el banner de “Gestionar consentimiento de cookies”, desde la página de política de cookies, tal y como me lo exige el cliente, pero al poner el código que indicáis, /#gdpr_cookie_modal, aquí en el enlace, no hace nada.
¿Podríais indicarme si tengo que realizar algún cambio o añadir algo más para que funcione?
Gracias y saludos
Carmen
Hola, Carmen! Gracias por comentar 😉 En principio no tendrías que hacer nada más para que saliera el enlace, siempre que el plugin de GDPR Cookie Compliance esté activo. Te recomiendo pasarte por el foro de soporte de WordPress para dejar tu duda. Seguro que desde ahí podrán resolverla mucho mejor los propios desarroladores 😉