El punto de partida
A partir del 19 de junio de 2026, toda tienda B2C de la UE necesita un botón de desistimiento. La base jurídica es la Directiva (UE) 2023/2673, que añade el artículo 11a a la Directiva sobre derechos de los consumidores (2011/83/UE). En España, el derecho de desistimiento se regula en el TRLGDCU (Real Decreto Legislativo 1/2007). No hay periodo transitorio.
El botón consta de dos etapas: „Desistir del contrato“ como punto de entrada, „Confirmar desistimiento“ al final del formulario. En medio, un breve formulario, seguido de un acuse de recibo por correo electrónico en un soporte duradero.
Forma A: etiqueta de script en la cabecera
La forma más sencilla. Añades una etiqueta de script en la zona de cabecera de tu instalación de WordPress. El script carga el widget, identifica tu tienda mediante la clave del widget y renderiza el botón en un Shadow DOM, sin colisionar con el CSS de tu tema.
Para ello editas el header.php de tu tema hijo. Nunca el del tema padre, de lo contrario la entrada desaparece tras la siguiente actualización.
<!-- widget/header.php, im Child-Theme -->
<?php wp_head(); ?>
<script
src="https://widerrufbutton.net/widget/v1/wh.js"
data-shop-id="<?php echo esc_attr(get_option('wrb_shop_id')); ?>"
data-position="footer"
data-lang="de"
async
defer
></script>Quien no tenga acceso al tema puede añadir el mismo script mediante un plugin como „Insert Headers and Footers“. Funciona de forma idéntica, pero tienes una dependencia más.
Forma B: filtro functions.php
Más limpio que una intervención directa en el header.php es un hook. Registras una función que entrega el script mediante el filtro propio de WordPress wp_enqueue_scripts. Ventaja: tu tema permanece intacto y la entrada se puede desactivar de forma limpia.
// functions.php deines Child-Themes
add_action('wp_footer', function () {
$shop_id = get_option('wrb_shop_id');
if (empty($shop_id)) {
return;
}
printf(
'<script src="https://widerrufbutton.net/widget/v1/wh.js" ' .
'data-shop-id="%s" data-position="footer" data-lang="de" async defer></script>',
esc_attr($shop_id)
);
}, 99);El valor de prioridad 99 hace que el script se cargue después de todos los demás scripts del pie de página. Esto evita que los plugins de caché lo minifiquen demasiado pronto.
Forma C: plugin de WordPress
Para comerciantes sin perfil de desarrollador estamos trabajando en un plugin oficial de WordPress. Instálalo, introduce el ID de la tienda, guarda. El botón aparece en el pie de página. El plugin enganchará el script como en la Forma B, ofrecerá una página de ajustes en el admin de WP y añadirá una comprobación de si el dominio configurado coincide con la instalación de WordPress.
Quien quiera salir en producción hoy usa la Forma A o B. El plugin es una comodidad, no un requisito.
Conflictos con los page builders
Las tiendas WooCommerce rara vez funcionan puras. La mayoría usa Elementor, Divi, Bricks o WPBakery. Cada uno de estos builders renderiza las plantillas de pie de página de forma autónoma y a veces elude el flujo de hooks estándar.
Elementor: comprueba si tu pie de página es un „Theme Builder Footer“. Si es así, añade el widget mediante un elemento HTML en el pie de página de Elementor, no en el functions.php. De lo contrario, Elementor lo renderiza por encima.
Divi: las Divi Theme Options tienen un campo „Code Integration“. Añade ahí las etiquetas de script, en la sección „Body“.
Bricks: usa su propio hook llamado bricks_body_end. Tu enqueue debe apuntar a él.
Plugins de caché y de seguridad
WP Rocket, WP Super Cache, LiteSpeed Cache y Autoptimize suelen tocar las etiquetas de script. Las minifican, combinan, retrasan o cargan vía JavaScript. Con el botón de desistimiento esto es un problema, porque el botón puede aparecer demasiado tarde o no cargarse en absoluto.
Solución: en los ajustes de caché, excluye widerrufbutton.net de minify y combine. En WP Rocket se llama „Never delay JavaScript“. En LiteSpeed, „JS Excludes“. En Autoptimize, „Exclude scripts from Autoptimize“.
Wordfence e iThemes Security pueden marcar como sospechosas las peticiones POST a dominios externos. El widget envía el desistimiento a nuestra API, no desde tu servidor. La petición va del navegador del cliente directamente a nosotros, así que no debería haber conflicto. Si lo hay de todas formas: pon widerrufbutton.net en la lista blanca.
Comprobar que la instalación realmente funciona
Abre tu tienda en modo incógnito. No hagas scroll. El botón debe ser visible en la navegación o en el pie de página. Haz clic en él. La ventana modal debe aparecer sin salto de scroll. Escribe un nombre de prueba, un correo de prueba, haz clic en „Confirmar desistimiento“. Deberías recibir un correo en cuestión de segundos.
En el panel de WiderrufButton, el desistimiento de prueba aparece en Desistimientos. Elimina después la entrada de prueba para mantener limpias tus estadísticas.
Lo que la ley exige técnicamente
El botón debe ser accesible sin hacer scroll, lo que en la práctica significa „above the fold“ en la navegación o en el pie de página visible. Debe estar disponible durante todo el plazo de desistimiento, es decir, al menos catorce días desde la recepción de la mercancía. La tienda no debe exigir un inicio de sesión.
El acuse de recibo debe seguir sin demora injustificada, contener el texto íntegro de la declaración de desistimiento, incluida la fecha y la hora, y entregarse en un soporte duradero. Un correo electrónico basta. Una notificación toast no.
Todo lo técnicamente necesario detrás de eso lo asume el widget: validación, limitación de tasa (10 peticiones por minuto por IP), comprobación CORS frente a tu dominio registrado, envío de correos, archivado a largo plazo con cadena de hash. Más detalles en la guía del botón de desistimiento.
Riesgo de requerimiento y prórroga del plazo de desistimiento
Si falta el botón, se activan dos mecanismos. Las asociaciones de defensa de la competencia envían requerimientos que suelen costar de 500 a 2.000 €. Y el plazo de desistimiento se prorroga automáticamente a doce meses y catorce días. Un cliente puede entonces desistir durante un año entero.
Ambos riesgos se pueden evitar añadiendo el botón hoy mismo.