¿Te acuerdas de la última vez que intentaste cancelar algo que compraste por internet? Comprarlo te llevó diez segundos. Cancelarlo, un email que nadie contestaba, un formulario en PDF y una llamada con musiquita de espera incluida (de esas que se te quedan en la cabeza tres días).
Pues eso, en la Unión Europea, se acabó. Desde el 19 de junio de 2026, la Directiva (UE) 2023/2673 obliga a las tiendas online que venden a consumidores europeos a ofrecer una función de desistimiento: un botón visible, dentro de tu propia web, para que el cliente pueda echarse atrás de una compra con la misma facilidad con la que la hizo.
Ojo, que el derecho a desistir no es nuevo. Tus clientes llevan años teniendo 14 días naturales para arrepentirse sin dar explicaciones. Lo que cambia es el cómo. Ya no vale esconderlo detrás de un email de contacto o de un formulario que hay que descargar, rellenar y enviar. La salida tiene que estar tan a la vista como la entrada. Es la misma filosofía que ya vimos con la obligación de mostrar el precio más bajo de los últimos 30 días cuando aplicas descuentos: Europa quiere que comprar online sea transparente de principio a fin.
Y aquí viene la buena noticia: WooCommerce ya trae esta función de serie desde la versión 11.1. Se activa en un par de clics… pero (siempre hay un pero) activarla no te deja automáticamente en regla. Le faltan algunas piezas que vas a tener que poner tú.
En esta guía vas a ver, paso a paso:
- Qué exige exactamente la ley, explicado sin jerga jurídica.
- Cómo activar y configurar el desistimiento nativo de WooCommerce.
- Qué le falta para cumplir y cómo solucionarlo con unos snippets sencillos.
- Qué textos legales tienes que actualizar y cómo gestionar cada solicitud que te llegue.
Un aviso antes de empezar: esto es una guía técnica, no asesoramiento legal. Si tienes dudas sobre tu caso concreto, consulta con un abogado especializado en consumo.
Índice
- Qué exige la Directiva 2023/2673 (sin jerga jurídica)
- ¿Y en España? La ley que llega tarde
- La solución nativa de WooCommerce: Order Withdrawal
- Snippets para cerrar los huecos
- Actualiza tus textos legales
- Cómo gestionar una solicitud: del aviso al reembolso
- Pruébalo todo antes de abrirlo al público
- Mi opinión honesta
- Conclusión
- Deja una respuesta Cancelar la respuesta
Qué exige la Directiva 2023/2673 (sin jerga jurídica)
Piensa en la salida de emergencia de un local. No basta con que exista: tiene que estar señalizada, a la vista y abierta mientras haya gente dentro. Con el desistimiento pasa lo mismo. La directiva no se conforma con que el cliente «pueda» desistir: le pone reglas muy concretas a esa puerta de salida.
Todo está en un artículo nuevo, el artículo 11 bis, que la Directiva 2023/2673 añade a la Directiva 2011/83/UE de derechos de los consumidores. Traducido a lenguaje de tienda online, te pide cuatro cosas:
- Un botón con nombre claro. La función tiene que llamarse «Desistir del contrato aquí» o algo igual de inequívoco, fácil de leer. Nada de «Gestionar mi pedido» o «Ayuda» (que no dicen nada). Además, debe estar destacada, fácil de encontrar y disponible durante todo el plazo de desistimiento.
- Un formulario mínimo. A través de ese botón, el cliente tiene que poder enviarte su declaración online indicando lo básico: su nombre, los datos que identifican el pedido y el email (u otro medio electrónico) donde quiere recibir la confirmación. Sin pedirle explicaciones ni ponerle obstáculos.
- Un paso de confirmación. Después de rellenarlo, tiene que haber un segundo botón que diga únicamente «Confirmar desistimiento» o una fórmula equivalente. Es el mismo esquema en dos pasos que ya conoces del botón de «Pedido con obligación de pago», pero al revés.
- Un acuse de recibo. En cuanto el cliente confirma, tienes que enviarle sin demora indebida un justificante en soporte duradero (un email vale) con el contenido de su solicitud y la fecha y hora en que la envió.
¿Y a quién afecta? A cualquier tienda que venda online a consumidores de la UE, esté donde esté el negocio. Da igual que factures desde Murcia o desde Miami: la norma sigue al cliente, no a la empresa. Si solo vendes a empresas (B2B puro), te quedas fuera.
Y ahora, lo que no cambia, que también es importante:
- El plazo sigue siendo de 14 días naturales, contados en general desde que el cliente recibe el pedido.
- Siguen existiendo las excepciones de siempre: productos personalizados, perecederos o precintados por higiene que el cliente ya ha abierto, entre otros.
- El botón no obliga a reembolsar automáticamente. Los plazos y condiciones del reembolso son los mismos que antes.
- Es una vía adicional. Si un cliente prefiere desistir por email o por teléfono, sigue pudiendo hacerlo.
En resumen: la ley no te pide que regales nada. Te pide que dejes de esconder la puerta.
¿Y en España? La ley que llega tarde
Aquí viene el giro de guion. Las directivas europeas no se aplican tal cual: cada país tiene que transponerlas, es decir, meterlas en su propia ley. El plazo para hacerlo acabó el 19 de diciembre de 2025. Y España… no llegó a tiempo.
El Gobierno decidió meter el botón de desistimiento dentro del Anteproyecto de Ley de contratos de crédito al consumo, que también modifica la Ley General para la Defensa de los Consumidores y Usuarios. El Consejo de Ministros lo aprobó el 7 de enero de 2026, pero sigue en tramitación: la CNMC publicó su informe sobre el texto en octubre de 2026. Es decir, mientras escribo esto, la norma todavía no está en el BOE. La OCU ya denunció el retraso el mismo 19 de junio.
¿Significa eso que puedes olvidarte del tema hasta que salga la ley? Mi consejo personal es que no, por cuatro motivos:
- Va a llegar sí o sí. España no puede quedarse fuera indefinidamente sin arriesgarse a un procedimiento de infracción de la Comisión Europea. Cuando se publique, el texto ya está escrito: los requisitos serán los que acabas de leer.
- Si vendes a otros países de la UE, ya te aplica. Países como Francia o Alemania sí transpusieron la directiva. Si un cliente francés te compra, la protección que le da su ley le acompaña.
- Los jueces ya la tienen en cuenta. Un tribunal español debe interpretar nuestra ley de consumo de forma coherente con la directiva, aunque esta no se haya transpuesto. Hacerlo bien desde ya te ahorra discusiones.
- Con WooCommerce te cuesta muy poco. La función viene de serie y los ajustes que le faltan son cuatro snippets. Hacerlo ahora, con calma, es mucho mejor que hacerlo con prisas el día que salga en el BOE (y con todos tus competidores llamando a la vez a su desarrollador).
Hay un quinto motivo menos legal y más de negocio: un cliente que sabe que puede echarse atrás fácilmente compra con más confianza. Esconder la puerta de salida no evita devoluciones, solo genera desconfianza y reclamaciones.
Por eso, en esta guía vamos a dejar tu tienda preparada para cumplir la directiva tal y como está redactada. Cuando la ley española se publique, revisaré este artículo por si añade algún matiz propio.
La solución nativa de WooCommerce: Order Withdrawal
La buena noticia es que no necesitas instalar ningún plugin. Desde la versión 11.1, publicada el 1 de septiembre de 2026, WooCommerce incluye de serie una función llamada Order Withdrawal (en español, desistimiento de pedido).
En pocas palabras, hace esto:
- Crea un formulario público de desistimiento dentro de tu página de Mi cuenta. El cliente no necesita iniciar sesión para usarlo, así que también sirve para quien compró como invitado (aunque desde hace poco WooCommerce ya asocia las compras como invitado a la cuenta del cliente).
- Le pide los datos justos para identificar el pedido y le muestra una pantalla de revisión antes de enviarlo.
- Te avisa por email y en el panel de WooCommerce, y deja una nota en el pedido si lo encuentra.
- Envía al cliente un email de acuse de recibo con los datos de su solicitud.
Y esto es lo que no hace, para que no te lleves sorpresas: no cambia el estado del pedido, no lo cancela y no devuelve el dinero. WooCommerce se limita a recoger la solicitud y ponértela delante. A partir de ahí, la decisión y la gestión son tuyas (como debe ser, porque tú sabes si ese producto admite desistimiento y si te ha llegado de vuelta).
Viene desactivada por defecto, porque no todas las tiendas la necesitan. Una tienda que solo vende a empresas, o que no vende en Europa, puede dejarla apagada sin problema.
¿Qué necesitas para usarla?
- WooCommerce 11.1 o superior. Puedes comprobar tu versión en Plugins > Plugins instalados.
- Una página de Mi cuenta asignada en WooCommerce > Ajustes > Avanzado > Configuración de página. Casi todas las tiendas la tienen, pero si la borraste en algún momento, el formulario no tendrá dónde vivir.
- Un envío de emails que funcione. Esto es más importante de lo que parece, y lo vas a ver en la sección de los emails.
Mi recomendación: actualiza WooCommerce en un entorno de pruebas antes que en tu tienda real, y con una copia de seguridad reciente a mano. Es lo de siempre, pero con un cambio que toca a tus clientes, merece la pena no saltarse el paso.
Paso a paso: activar el desistimiento y personalizar la URL
Activarlo te va a llevar menos tiempo que prepararte un café. Vamos por partes.
Paso 1: activa la función
- Entra en WooCommerce > Ajustes > Avanzado > Características.
- Busca Retirada del pedido u «Order withdrawal» si lo tienes en inglés, en la lista principal de características. No está en el bloque de funciones experimentales, así que no hace falta que bajes hasta el final.
- Marca la casilla. La descripción dice algo así como «Activa la función pública de desistimiento de pedidos para las solicitudes de los clientes».
- Pulsa Guardar cambios.

Con esto, el formulario ya existe. Por defecto vive en esta dirección:
tutienda.com/mi-cuenta/withdraw-order/
Funciona, sí. Pero ¿de verdad quieres que tus clientes españoles vean withdraw-order en la barra del navegador? Vamos a arreglarlo.

Paso 2: cambia la URL por una en español
- Ve a WooCommerce > Ajustes > Avanzado > Instalación de páginas.
- Baja hasta el grupo Variables de la cuenta o «Endpoints de la cuenta». Al final del todo verás un campo nuevo, Order withdrawal, que solo aparece mientras la función está activada.
- Sustituye
withdraw-orderpor el texto que quieras. Mi recomendación es desistimiento: corto, claro y es exactamente la palabra que usa la ley. - Guarda los cambios.

Ahora tu formulario estará en:
tutienda.com/mi-cuenta/desistimiento/
Un par de detalles que conviene saber:
- No tienes que volver a guardar los enlaces permanentes. WooCommerce actualiza las reglas de URL por su cuenta (una cosa menos que olvidar).
- La parte de «mi-cuenta» la decide tu página de Mi cuenta. Si la llamaste «area-cliente», el formulario quedará en /area-cliente/desistimiento/.
- Decide la URL antes de enlazarla en ningún sitio. Si la cambias después, los enlaces que ya hayas puesto en emails enviados o en tus textos legales dejarán de funcionar.
Paso 3: comprueba que carga
Abre una ventana de incógnito, sin haber iniciado sesión, y entra en la nueva URL. Deberías ver el formulario de desistimiento directamente, sin que te pida usuario ni contraseña.

Si en lugar del formulario te aparece un error 404, revisa estas tres cosas:
- Que la función siga activada en Características.
- Que tengas una página asignada como Mi cuenta en Configuración de página.
- Que tu plugin de caché o tu hosting no esté sirviendo una versión antigua de las páginas de cuenta. Si usas caché, acórdate de vaciarla después del cambio.
Un aviso importante: que el formulario exista no significa que tus clientes lo vayan a encontrar. WooCommerce crea la página, pero no pone ningún botón que lleve hasta ella. Eso lo solucionamos más adelante, en la sección de snippets.
Configura los dos emails (y no apagues el del cliente)
En cuanto activas la retirada del pedido, WooCommerce añade dos emails nuevos a tu tienda. Los encontrarás en WooCommerce > Ajustes > Correos electrónicos:
| Para quién | Para qué sirve | |
|---|---|---|
| Solicitud de desistimiento del pedido | Tú | Te avisa de que un cliente quiere desistir, con sus datos y un enlace al pedido si lo encuentra. |
| Solicitud de retirada de pedido recibida | Tu cliente | Es el acuse de recibo: le confirma que su solicitud te ha llegado y le resume lo que envió. |

Pulsando Gestionar junto a cada uno puedes activarlo o desactivarlo, cambiar el asunto, el encabezado y el contenido adicional, y ver una vista previa. Lo de siempre cuando personalizas los correos electrónicos de WooCommerce.
El email para ti: elige bien quién lo recibe
Es el único de los dos que tiene el campo Destinatario(s). Por defecto usa el email de administración de WordPress, el que pusiste en Ajustes > Generales.

¿Es ese el email que de verdad revisas a diario? En muchas tiendas, el email de administración es el del desarrollador que montó la web hace tres años (hola, soy yo). Cambia el destinatario por la dirección de quien gestiona los pedidos o la atención al cliente. Puedes poner varias separadas por comas.
Aunque desactives este email, WooCommerce seguirá añadiendo una nota al pedido y un aviso en el panel cuando la solicitud coincida con un pedido. Pero si no coincide (por ejemplo, porque el cliente se equivocó al escribir el número), este email es el único aviso que vas a tener. Mi consejo: déjalo siempre activado.
El email para el cliente: este no se toca
Aquí viene lo importante. ¿Recuerdas el cuarto requisito de la directiva? Tras confirmar, el cliente tiene que recibir un acuse de recibo en soporte duradero con el contenido de su solicitud y la fecha y hora en que la envió.
Ese acuse es justo este email. Si lo desactivas, WooCommerce te deja hacerlo sin protestar… y tú dejas de cumplir la ley sin darte cuenta. Así que mi consejo aquí no es un consejo: mantenlo activado siempre.

Y una comprobación más: he revisado el código de WooCommerce y este email incluye una línea con la fecha y la hora exactas del envío. Usa el formato de fecha y hora y la zona horaria que tengas en Ajustes > Generales, así que entra ahí y comprueba que la zona horaria sea la de tu tienda (Madrid, por ejemplo). Si no, el justificante que recibe tu cliente llevará la hora equivocada.
Aprovecha también el campo de contenido adicional para explicarle al cliente qué pasa ahora (si quieres ir más allá de este campo, te enseño a añadir contenido a los emails de WooCommerce con código). Algo así:
Hemos recibido tu solicitud de desistimiento. En un plazo máximo de 48 horas te escribiremos con las instrucciones para devolver el producto. Recuerda que te reembolsaremos el importe en un plazo máximo de 14 días desde que nos comunicaste tu decisión, aunque podemos esperar a recibir el producto o a que nos envíes el justificante de envío.

Adáptalo a tus plazos reales, claro. Un cliente que sabe qué va a pasar es un cliente que no te escribe tres veces para preguntar.
Asegúrate de que tus emails salen
Esto es lo que más problemas da, y casi nadie lo comprueba. Si un email que tienes activado falla al enviarse, WooCommerce no completa la solicitud y el cliente ve un error. Traducido: una tienda con los emails rotos tiene, en la práctica, el botón de desistimiento roto.
Si todavía envías los emails con la función de correo básica de tu servidor, es el momento de configurar un envío por SMTP con un servicio fiable. Te lo explico paso a paso en WooCommerce no envía emails: cómo solucionarlo configurando SMTP, y si tus correos terminan en la carpeta de correo no deseado, revisa también cómo evitar la bandeja de SPAM. Y después, haz la prueba completa que te explico en la sección de testing.
Lo que ve tu cliente: el proceso paso a paso
Antes de tocar nada más, ponte en el lugar de tu cliente. ¿Qué se encuentra cuando quiere echarse atrás? Este es el recorrido completo.
- Entra en el formulario. Llega a /mi-cuenta/desistimiento/ (o la URL que hayas elegido). No necesita iniciar sesión, así que da igual que tenga cuenta o que comprara como invitado.
- Rellena sus datos. El formulario le pide:
- Nombre y apellidos.
- Email, escrito dos veces para evitar errores.
- Número de pedido.
- Elige qué devuelve. Puede desistir del pedido completo o solo de algunos productos. Si elige lo segundo, tiene que explicar cuáles en el campo de detalles adicionales. Es un campo de texto libre, no una lista de productos para marcar (ojo con esto, que luego tendrás que leer con atención lo que te escribe).
- Revisa la solicitud. Antes de enviarla, ve un resumen con todo lo que ha escrito y dos opciones: volver a editar los datos o confirmar el desistimiento. Este es el paso de confirmación que exige la directiva.
- Recibe la confirmación. Al confirmar, ve una pantalla de solicitud enviada y le llega el email de acuse de recibo que configuraste en la sección anterior.

Con eso, el cliente ha terminado. Todo lo demás ya es cosa tuya.
Dos límites que conviene conocer:
- Una sola solicitud por pedido. Si el cliente intenta enviar otra para un pedido que ya tiene una, el formulario se la rechaza con un mensaje que le invita a contactar contigo. Y a ti no te llega ningún aviso de ese segundo intento. Si un cliente quiere añadir algo o corregir su solicitud, lo hará por email o teléfono, así que deja tus datos de contacto bien visibles, por ejemplo en el pie de página de tu tienda.
- Una solicitud cada 30 segundos. Es una protección contra el spam, por email y por IP. Un cliente normal ni se va a enterar.
El detalle que más problemas da: el número de pedido
¿Sabe tu cliente cuál es su número de pedido? Puede que sí, puede que no. WooCommerce lo usa junto con el email de facturación para encontrar el pedido. Si el cliente se equivoca en cualquiera de los dos, la solicitud llega igual, pero sin vincular al pedido (lo vemos en la siguiente sección).
Para ponérselo fácil, recuérdale dónde encontrarlo: en el email de confirmación de su compra o en Mi cuenta > Pedidos si está registrado (otro buen motivo para invitar a tus clientes a registrarse después de la compra). Puedes añadir esa frase en tu página de política de devoluciones, justo al lado del enlace al formulario.
Una comprobación importante: los textos de los botones
Recuerda que la directiva exige que el botón final diga «Confirmar desistimiento» o algo igual de inequívoco. WooCommerce lo trae en inglés como Confirm withdrawal, y la traducción al español depende del paquete de idioma, en nuestro caso «Confirmar retirada». Entra en el formulario con tu tienda en español y comprueba qué dice exactamente. Si la traducción no te convence, en la sección de snippets te enseño a cambiarla.
Lo que ves tú: cómo te llegan las solicitudes
Ahora cambiamos de lado del mostrador. Cuando un cliente confirma su desistimiento, lo que tú ves depende de una sola cosa: si WooCommerce ha encontrado el pedido o no.
Para encontrarlo, cruza el número de pedido con el email de facturación. Si los dos coinciden con un pedido de tu tienda, la solicitud queda vinculada. Si no, llega igualmente, pero sin vincular.
Cuando encuentra el pedido
Es el caso fácil. Te enteras por tres vías:
- El email de aviso, con los datos de la solicitud y un enlace directo al pedido.
- Una nota en el propio pedido, que deja constancia de la solicitud. Muy útil si en tu tienda gestiona pedidos más de una persona.
- Un aviso en la bandeja de entrada de WooCommerce, en la pantalla de inicio de WooCommerce, con un botón para ver el pedido.

La nota y el aviso del panel aparecen aunque tengas desactivado el email. Pero no te confíes: ¿cuántas veces entras a mirar la bandeja de entrada de WooCommerce? Exacto.
Cuando no lo encuentra
El cliente puso mal el número de pedido, o compró con un email distinto al que ha escrito ahora. Pasa más de lo que crees.
En ese caso la solicitud se acepta igual (el cliente ha ejercido su derecho, aunque se haya equivocado al escribir), pero:
- No hay nota en el pedido, porque no sabe a qué pedido ponérsela.
- No hay aviso en el panel.
- Solo te llega el email, avisándote de que no ha podido vincularla y de que tienes que revisarla a mano.
Ahora lo ves claro, ¿verdad? Si tienes desactivado el email de aviso y llega una solicitud sin vincular, no te enteras de nada. Ni email, ni nota, ni aviso. Y el cliente pensando que ya lo tienes todo en marcha. Por eso te decía en la sección anterior que lo dejes siempre activado.
Para localizar el pedido a mano, usa el nombre, el email y el número que escribió el cliente en el buscador de pedidos. Si entras a menudo, te vendrá bien tener el menú de Pedidos a mano en el administrador.
El aviso de los 14 días (y por qué no debes fiarte de él)
Si el pedido vinculado tiene más de 14 días, WooCommerce añade una advertencia al email y al aviso del panel: el pedido es anterior a 14 días y solo pueden desistirse los pedidos dentro de los 14 días desde la entrega.
Suena útil, pero tiene truco. WooCommerce cuenta esos 14 días desde la fecha de creación del pedido, porque no sabe cuándo lo recibió el cliente. Y la ley los cuenta, en general, desde la entrega.
Un ejemplo: un cliente compra el 1 de junio y recibe el paquete el 5. El 16 de junio te pide desistir. WooCommerce te mostrará la advertencia, porque han pasado 15 días desde la compra. Pero desde la entrega solo han pasado 11, así que el cliente está en plazo.
Por eso, trata ese aviso como lo que es: una pista para revisar, no una decisión. WooCommerce no rechaza ni bloquea nada por ello. Compruébalo siempre con la fecha real de entrega, que normalmente tendrás en el seguimiento de tu empresa de transporte (y si todavía no lo tienes integrado, aquí te explico cómo añadir el seguimiento de pedido en WooCommerce).
Lo que WooCommerce no hace por ti
Repítelo conmigo: la solicitud no cambia el estado del pedido, no lo cancela y no devuelve el dinero. Tu pedido sigue exactamente igual que antes.
Y otro detalle: el formulario vincula solicitudes a pedidos en cualquier estado, incluso pedidos ya cancelados, reembolsados o fallidos. Antes de mover un dedo, mira siempre en qué estado está el pedido. Cómo gestionarlo a partir de ahí lo vemos con calma más adelante.
Lo que le falta a WooCommerce para cumplir
Llegamos a la parte que casi nadie te cuenta. Activar la retirada del pedido es un gran paso, pero no te deja en regla por sí solo. La propia documentación de WooCommerce lo avisa: la función no garantiza el cumplimiento de la ley.
He puesto cara a cara cada requisito de la directiva con lo que hace WooCommerce de serie. Este es el resultado:
| Lo que exige la ley | Lo que hace WooCommerce | Estado | Qué tienes que hacer tú |
|---|---|---|---|
| Un botón o enlace con el texto «Desistir del contrato aquí», destacado y fácil de encontrar | Crea la página del formulario, pero no pone ningún botón ni enlace que lleve hasta ella | No lo hace | Enlazarla en Mi cuenta, en los emails de pedido y en el pie de página (snippets) |
| Disponible durante todo el plazo de desistimiento | La página está siempre activa | Cumple | Nada, mientras no desactives la función |
| Un formulario con nombre, datos del pedido y email de contacto | Pide nombre, apellidos, email, número de pedido y qué se devuelve | Cumple | Nada |
| Un paso de confirmación con el texto «Confirmar desistimiento» | Tiene pantalla de revisión, pero en español el botón dice «Confirmar retirada» | A medias | Cambiar el texto del botón (snippet) |
| Acuse de recibo en soporte duradero, con el contenido, la fecha y la hora | Envía un email con los datos, la fecha y la hora, pero se puede desactivar | A medias | Mantenerlo siempre activado y revisar la zona horaria de tu web |
| Plazo de 14 días, normalmente desde la entrega | Avisa a partir de 14 días desde la creación del pedido | A medias | Comprobar siempre la fecha real de entrega |
| Respetar las excepciones al desistimiento | Acepta cualquier pedido y cualquier producto | No lo hace | Revisar cada solicitud a mano e informar de las excepciones en tus textos legales |
| Informar al cliente antes de la compra de dónde está la función | No toca tus textos legales | No lo hace | Actualizar tu política de devoluciones y condiciones |
Si lo resumes, WooCommerce resuelve muy bien la parte del formulario, que era la más pesada de programar. Lo que le falta es todo lo que rodea al formulario: que el cliente lo encuentre, que los textos digan lo que tienen que decir y que tú sepas cuándo decir que no.
¿Por qué insisto tanto con «retirada»?
Podrías pensar que «Confirmar retirada» es una formulación equivalente y que no pasa nada. Puede que un juez lo viera así. Pero en España la palabra que usa la ley, y la que tus clientes conocen, es desistimiento. «Retirada» suena a otra cosa (¿retirar el qué?, ¿el pedido de la tienda física?).
La directiva pide una formulación inequívoca. Si cambiar un texto te cuesta una línea de código, ¿para qué dejar la duda? Mi consejo personal: usa exactamente las expresiones de la ley, «Desistir del contrato aquí» y «Confirmar desistimiento».
Y las excepciones, que son cosa tuya
Este punto merece una mención aparte. El formulario no sabe qué vendes, así que acepta solicitudes de cualquier producto. Pero hay productos que, por ley, no admiten desistimiento. Algunos ejemplos típicos:
- Productos personalizados o hechos a medida para el cliente.
- Productos perecederos o que caducan rápido.
- Productos precintados por motivos de higiene o salud que el cliente ha abierto: cosmética, productos de cuidado personal, ropa interior…
- Contenido digital que el cliente ya ha descargado, si aceptó perder el derecho al empezar la descarga.
Ojo con el tercero, que es el que más confusión genera. Si vendes, por ejemplo, esmaltes de uñas, un bote sin abrir sí se puede devolver. Lo que pierde el derecho es el bote que se ha abierto. Así que no puedes rechazar una solicitud solo porque sea un cosmético: tienes que ver si el precinto sigue intacto.
Con esta foto clara, vamos a cerrar los huecos que sí se pueden cerrar con código.
Snippets para cerrar los huecos
Vamos con la parte divertida. Con cuatro snippets vas a poner el botón donde tus clientes lo van a buscar y a dejar los textos como dice la ley.
Antes de escribirlos, me he leído el código de la retirada del pedido en WooCommerce para usar los nombres exactos que usa por dentro. Tres datos que vas a ver en el código:
- La clave interna del formulario es order-withdrawal. Aunque hayas cambiado la URL a /desistimiento/, WooCommerce lo sigue llamando así por dentro. Por eso los snippets leen tu URL directamente del ajuste que guardaste, para no depender de esa traducción interna.
- La función se llama internamente order_withdrawal, y es lo que usamos para comprobar si está activada.
- WooCommerce no añade ningún enlace al menú de Mi cuenta. Lo he comprobado: solo registra la página.
Puedes pegar estos snippets en el functions.php de tu tema hijo o en tu plugin de fragmentos de código de confianza. Como siempre, pruébalos primero en tu entorno de pruebas. Y si te gustan este tipo de soluciones, tienes muchas más en mi sección de snippets para WooCommerce.
Snippet 0: las dos funciones de ayuda
Este lo necesitan todos los demás, así que va primero. Una función comprueba si la retirada del pedido está activada y la otra te da la URL del formulario. Si algún día desactivas la función, el resto de snippets dejan de mostrar el botón solos, sin dejarte enlaces rotos por la tienda.
/**
* Comprueba si la retirada del pedido de WooCommerce está activada.
*/
function dl_desistimiento_activo() {
return function_exists( 'WC' )
&& class_exists( '\Automattic\WooCommerce\Utilities\FeaturesUtil' )
&& \Automattic\WooCommerce\Utilities\FeaturesUtil::feature_is_enabled( 'order_withdrawal' );
}
/**
* Devuelve la URL del formulario de desistimiento.
* Lee la URL que has guardado en Ajustes > Avanzado > Instalación de páginas.
*/
function dl_url_desistimiento() {
$slug = get_option( 'woocommerce_myaccount_order_withdrawal_endpoint', 'withdraw-order' );
$mi_cuenta = wc_get_page_permalink( 'myaccount' );
if ( ! get_option( 'permalink_structure' ) ) {
return add_query_arg( $slug, '', $mi_cuenta );
}
return trailingslashit( $mi_cuenta ) . user_trailingslashit( $slug );
}
Snippet 1: el enlace en el menú de Mi cuenta
El sitio más lógico donde un cliente registrado buscará cómo desistir es su cuenta. Este snippet añade «Desistir del contrato aquí» al menú de Mi cuenta, justo antes de «Salir».
add_filter( 'woocommerce_get_endpoint_url', 'dl_corregir_url_desistimiento', 20, 2 );
/**
* Si WooCommerce genera el enlace con la clave interna en vez de tu URL, lo corrige.
*/
function dl_corregir_url_desistimiento( $url, $endpoint ) {
if ( 'order-withdrawal' === $endpoint && dl_desistimiento_activo() ) {
return dl_url_desistimiento();
}
return $url;
}
add_filter( 'woocommerce_account_menu_items', 'dl_menu_mi_cuenta_desistimiento', 20 );
/**
* Añade "Desistir del contrato aquí" al menú de Mi cuenta, justo antes de Salir.
*/
function dl_menu_mi_cuenta_desistimiento( $items ) {
if ( ! dl_desistimiento_activo() ) {
return $items;
}
$salir = array();
if ( isset( $items['customer-logout'] ) ) {
$salir = array( 'customer-logout' => $items['customer-logout'] );
unset( $items['customer-logout'] );
}
$items['order-withdrawal'] = 'Desistir del contrato aquí';
return $items + $salir;
}
Sí, el texto es largo para un menú. Pero es exactamente la expresión que pide la directiva, así que te recomiendo no acortarlo.
¿Para qué sirve la primera función del snippet? Al probarlo en una tienda real, el enlace del menú apuntaba a /mi-cuenta/order-withdrawal/ (la clave interna) en vez de a /mi-cuenta/desistimiento/, y daba error. Pasa cuando el tema o algún plugin calcula los enlaces del menú antes de que WooCommerce registre tu URL personalizada. La función dl_corregir_url_desistimiento detecta ese caso y lo arregla, sin tocar el resto de enlaces de Mi cuenta.
Otra cosa que te va a llamar la atención: al pulsar el enlace, el formulario se abre sin el menú lateral de Mi cuenta. No es un fallo. WooCommerce lo muestra así a propósito para que funcione igual con o sin sesión iniciada.

Snippet 2: un shortcode para el pie de página
El menú de Mi cuenta solo lo ve quien ha iniciado sesión. ¿Y los clientes que compraron como invitados? Necesitan un enlace visible en toda la tienda, y el mejor sitio es el pie de página, junto a tus enlaces legales.
Este shortcode pinta el enlace con el texto legal y la URL correcta:
add_shortcode( 'dl_boton_desistimiento', 'dl_shortcode_boton_desistimiento' );
/**
* Shortcode [dl_boton_desistimiento] con el enlace al formulario.
*/
function dl_shortcode_boton_desistimiento() {
if ( ! dl_desistimiento_activo() ) {
return '';
}
return sprintf(
'<a class="dl-boton-desistimiento" href="%s">Desistir del contrato aquí</a>',
esc_url( dl_url_desistimiento() )
);
}
Úsalo escribiendo [dl_boton_desistimiento] en un widget de texto del pie, en el widget de shortcode de Elementor o en tu página de política de devoluciones. Si quieres que parezca un botón, dale estilo con la clase dl-boton-desistimiento.
¿No quieres código para esto? También vale añadir un enlace personalizado en el menú de tu pie de página, con el texto «Desistir del contrato aquí» y la URL de tu formulario. La ventaja del shortcode es que, si un día cambias la URL, el enlace se actualiza solo.
Snippet 3: el enlace en los emails de pedido
Piénsalo: ¿qué es lo primero que hace un cliente que quiere devolver algo? Buscar el email de su compra. Este snippet añade el enlace a los emails de pedido en procesamiento y pedido completado, y de paso le recuerda su número de pedido, que es justo el dato que le va a pedir el formulario.
add_action( 'woocommerce_email_after_order_table', 'dl_enlace_desistimiento_emails', 20, 4 );
/**
* Añade el enlace de desistimiento a los emails de pedido en procesamiento y completado.
*/
function dl_enlace_desistimiento_emails( $order, $sent_to_admin, $plain_text, $email ) {
if ( $sent_to_admin || ! dl_desistimiento_activo() ) {
return;
}
$emails_cliente = array( 'customer_processing_order', 'customer_completed_order' );
if ( ! is_object( $email ) || ! in_array( $email->id, $emails_cliente, true ) ) {
return;
}
$url = dl_url_desistimiento();
$numero = $order->get_order_number();
if ( $plain_text ) {
echo "\n¿Has cambiado de opinión? Puedes desistir de tu compra aquí: " . esc_url_raw( $url ) . "\n";
echo 'Tu número de pedido es: ' . esc_html( $numero ) . "\n\n";
return;
}
printf(
'<p style="margin:16px 0;">¿Has cambiado de opinión? Puedes desistir de tu compra sin dar explicaciones. Tu número de pedido es <strong>%s</strong>. <a href="%s">Desistir del contrato aquí</a></p>',
esc_html( $numero ),
esc_url( $url )
);
}
El snippet funciona tanto con los emails en HTML como con los de texto plano. Si quieres añadirlo a otros emails, solo tienes que sumar su identificador al array $emails_cliente. Y si quieres profundizar en este tipo de personalizaciones, te lo explico con más detalle en cómo añadir contenido a los emails de WooCommerce.
Snippet 4: «Confirmar desistimiento» en vez de «Confirmar retirada»
El último arregla los textos del formulario. Cambia el botón final por «Confirmar desistimiento», el título de la página por «Desistir del contrato» y la frase que avisa de que todavía no se ha enviado nada, para que cite el botón con su nuevo nombre.
add_filter( 'gettext', 'dl_textos_desistimiento', 20, 3 );
/**
* Cambia los textos del formulario por las expresiones que usa la ley.
*/
function dl_textos_desistimiento( $traduccion, $texto, $dominio ) {
if ( 'woocommerce' !== $dominio ) {
return $traduccion;
}
static $textos = array(
'Confirm withdrawal' => 'Confirmar desistimiento',
'Withdraw from contract' => 'Desistir del contrato',
'Nothing has been sent yet. Your withdrawal is submitted when you select "Confirm withdrawal".' => 'Todavía no se ha enviado nada. Tu desistimiento se enviará cuando pulses «Confirmar desistimiento».',
);
return $textos[ $texto ] ?? $traduccion;
}
Un detalle técnico: el filtro compara con el texto original en inglés, no con la traducción. Por eso funciona igual tengas WooCommerce en español, en inglés o en catalán. Y si algún día prefieres traducirlo con un plugin de traducciones, también te vale: busca esas mismas cadenas en el dominio woocommerce.
¿Y la fecha y la hora del acuse?
En el planteamiento inicial de este artículo tenía previsto un quinto snippet para añadir la fecha y la hora al email del cliente. Al revisar el código he visto que WooCommerce ya las incluye, así que no hace falta. Solo revisa la zona horaria, como te conté en la sección de los emails.
Actualiza tus textos legales
Ya tienes el botón en su sitio. Pero hay una pieza que ningún snippet puede poner por ti: avisar al cliente, antes de que compre, de que esa función existe.
La directiva también modifica el modelo oficial de información sobre el desistimiento, el que seguramente ya tienes copiado en tus condiciones (sí, ese texto que empieza por «Tiene usted derecho a desistir del presente contrato en un plazo de 14 días…»). Ahora, si ofreces la función online, tienes que añadir un párrafo nuevo.
El párrafo que tienes que añadir
Este es el texto oficial del anexo I de la directiva. Solo tienes que completar la parte de los puntos suspensivos con la URL de tu formulario:
También puede ejercer su derecho de desistimiento en línea en [la dirección de tu formulario]. Si utiliza esta función en línea, le enviaremos sin demora indebida un acuse de recibo del desistimiento en un soporte duradero (por ejemplo, por correo electrónico), que incluirá su contenido y la fecha y hora de presentación.
Así quedaría con una URL real:
También puede ejercer su derecho de desistimiento en línea en tutienda.com/mi-cuenta/desistimiento/, a través del enlace «Desistir del contrato aquí» que encontrará en el pie de página, en su cuenta y en los emails de su pedido. Si utiliza esta función en línea, le enviaremos sin demora indebida un acuse de recibo del desistimiento en un soporte duradero (por ejemplo, por correo electrónico), que incluirá su contenido y la fecha y hora de presentación.
Y fíjate en una cosa: lo que promete ese párrafo (un acuse con contenido, fecha y hora) es justo lo que hace el email de WooCommerce que configuraste antes. Otra razón más para no desactivarlo nunca.
Dónde ponerlo
En el apartado de derecho de desistimiento de tu tienda. Según cómo la tengas montada, estará en uno o en varios de estos sitios:
- Tu página de política de devoluciones.
- Tus condiciones generales de venta. Si es la página que tienes asignada como términos y condiciones en WooCommerce > Ajustes > Avanzado > Instalación de páginas, el cliente la acepta en el checkout, así que es el sitio más importante.
- Cualquier PDF o documento con las condiciones que adjuntes a tus emails.
Si el texto está repetido en varias páginas, actualízalo en todas. No hay nada peor que dos versiones distintas de tus condiciones conviviendo en la misma tienda.
Lo que no tienes que quitar:
El botón es una vía adicional, así que no borres lo que ya tenías:
- El modelo de formulario de desistimiento (el de «A la atención de…») sigue siendo obligatorio. El cliente puede seguir usándolo por email si lo prefiere.
- Tu email y tu dirección de contacto para desistir, también.
Aprovecha para revisar el resto del apartado
Ya que tienes el apartado abierto, comprueba que dice con claridad estas cuatro cosas:
- Qué productos no admiten desistimiento en tu tienda. No copies la lista genérica de la ley: pon las excepciones que de verdad aplican a lo que vendes. Si vendes cosmética, por ejemplo, algo como «los productos precintados por motivos de higiene no se pueden devolver una vez abiertos».
- Quién paga la devolución. Si quieres que los gastos de envío de vuelta los pague el cliente, tienes que haberlo avisado antes de la compra. Si no lo dices, los pagas tú.
- El plazo de reembolso. Tienes 14 días desde que el cliente te comunica que desiste, aunque puedes esperar a recibir el producto o el justificante de que lo ha enviado.
- Cómo devuelve el producto. La dirección a la que enviarlo y en qué condiciones debe llegar.
Un aviso honesto: estos textos tienen consecuencias legales reales. Si tu tienda vende mucho o vendes fuera de España, merece la pena que un abogado especializado en consumo les eche un vistazo. Lo que te propongo aquí es el punto de partida, no la revisión final.
Cómo gestionar una solicitud: del aviso al reembolso
Te ha llegado tu primera solicitud de desistimiento. ¿Y ahora qué? WooCommerce ya ha hecho su parte (recoger la solicitud y enviar el acuse), así que el resto es trabajo tuyo. Este es el proceso que te recomiendo seguir, paso a paso.
Paso 1: localiza el pedido
Si la solicitud está vinculada, entra desde el enlace del email o desde el aviso del panel. Si no lo está, búscalo con el nombre, el email y el número que escribió el cliente, como vimos antes.
Paso 2: revisa tres cosas antes de responder
- El estado del pedido. Recuerda que la solicitud puede llegar de un pedido ya cancelado o reembolsado. Si es así, no hay nada que devolver: respóndele explicándoselo.
- El plazo. Comprueba la fecha en la que el cliente recibió el pedido, no la de compra. Si han pasado menos de 14 días desde la entrega, está en plazo, aunque WooCommerce te muestre su advertencia.
- Los productos. Mira qué quiere devolver (pedido completo o solo algunos artículos, que te los habrá descrito en los detalles adicionales) y si alguno es una excepción: personalizado, perecedero, precintado…
Paso 3: responde al cliente (y rápido)
El acuse automático le dice al cliente que has recibido su solicitud, pero no qué tiene que hacer ahora. Escríbele tú, a ser posible el mismo día. Tienes dos respuestas posibles:
- Si procede, envíale las instrucciones de devolución: a qué dirección enviar el producto, en qué condiciones, quién paga el envío de vuelta y en cuánto tiempo tiene que hacerlo (la ley le da 14 días desde que te comunicó su decisión). Si trabajas con una empresa de transporte que hace recogidas, ofrécesela: es un detalle que se agradece.
- Si no procede, explícale el motivo con claridad y sin tecnicismos: está fuera de plazo, o el producto está personalizado, o era un precintado que ya se abrió. Y si quieres hacer una excepción por buena voluntad, adelante. Pero que sea una decisión tuya, no un despiste.
Un consejo personal: añade una nota al pedido con lo que le has respondido. Si mañana el cliente llama y te coge otra persona del equipo, sabrá en qué punto está todo.
Paso 4: recibe y revisa el producto
Cuando te llegue el paquete, revísalo. Si el cliente ha usado el producto más allá de lo necesario para comprobarlo (como lo haría en una tienda física), la ley te permite descontar esa depreciación del reembolso. Pero ojo: tiene que ser un uso real, no una caja abierta. Abrir el paquete para ver el producto no cuenta.
Paso 5: haz el reembolso en WooCommerce
Tienes 14 días desde que el cliente te comunicó su desistimiento para devolverle el dinero, aunque puedes esperar a recibir el producto o el justificante de que lo ha enviado.
- Entra en el pedido y pulsa Reembolso.
- Indica las cantidades de cada producto devuelto. Si desiste del pedido completo, tienes que devolver también los gastos de envío que pagó. La excepción es el sobrecoste si eligió un envío más caro que el estándar (un envío urgente, por ejemplo): esa diferencia no tienes que devolverla.
- Marca Reponer artículos reembolsados si el producto vuelve a estar en condiciones de venta, para que se sume al stock.
- Elige cómo devolver el dinero. Si tu pasarela de pago admite reembolsos automáticos, WooCommerce lo devuelve directamente. Si no, lo marcará como reembolsado y tendrás que hacer tú la transferencia o la devolución desde el panel de tu pasarela.
El reembolso tiene que hacerse por el mismo medio de pago que usó el cliente, salvo que él acepte otro. Nada de imponer un vale o saldo en la tienda.

Y un último detalle: los reembolsos también cuentan para tu contabilidad. Cuando te toque exportar los pedidos para tu asesor, asegúrate de que aparecen.
Pruébalo todo antes de abrirlo al público
No esperes a que tu primer cliente sea quien descubra que algo falla. Antes de activar la función en tu tienda real, haz esta prueba completa en tu entorno de pruebas. Te llevará unos 20 minutos.
Antes de empezar: usa siempre pedidos de prueba con un email tuyo. Las pruebas envían emails de verdad, así que nada de usar datos de clientes reales.
¿No tienes entorno de pruebas? WordPress Playground te sirve para ver el formulario, el menú y los textos en un momento. Eso sí, no envía emails, así que la parte de la solicitud completa tendrás que probarla en un staging de verdad.
La configuración
- La retirada del pedido está activada y la URL es la que elegiste (por ejemplo, /desistimiento/).
- Los dos emails están activados, y el aviso para ti llega a la dirección correcta.
- La zona horaria de Ajustes > Generales es la de tu tienda.
- Los snippets están pegados y la caché vaciada.
Que el cliente encuentre el botón
- En una ventana de incógnito, sin sesión, el formulario carga en tu URL.
- El enlace «Desistir del contrato aquí» aparece en el pie de página y funciona.
- Con un usuario cliente, el enlace aparece en el menú de Mi cuenta, antes de Salir, y lleva a la URL correcta (no a /order-withdrawal/).
- Al hacer un pedido de prueba, los emails de pedido en procesamiento y completado incluyen el enlace y el número de pedido.
- Todo lo anterior se ve bien también desde el móvil.
La solicitud completa
- Rellenas el formulario con el número y el email de tu pedido de prueba.
- En la pantalla de revisión, el botón de editar te devuelve al formulario con los datos.
- El botón final dice «Confirmar desistimiento».
- Al confirmar, ves la pantalla de solicitud enviada.
- Te llega el acuse de recibo con los datos y la fecha y hora correctas.
- Te llega el aviso a la dirección del comercio, con el enlace al pedido.
- El pedido tiene una nota nueva y aparece el aviso en el panel de WooCommerce.
- El estado y el pago del pedido no han cambiado.
Los casos raros
- Pasados 30 segundos, intentas enviar otra solicitud del mismo pedido y el formulario te avisa de que ya existe una.
- Con un número de pedido inventado, la solicitud se acepta y te llega el email de revisión manual, sin nota ni aviso en el panel.
Y por último, lo que no es código
- Tu política de devoluciones y tus condiciones incluyen el párrafo nuevo con la URL del formulario.
- Las excepciones que aplican a tus productos están explicadas con claridad.
- Quien gestiona los pedidos en tu tienda sabe cómo responder a una solicitud.
Si todo está marcado, ya puedes llevarlo a tu tienda real con tranquilidad. Y repite la prueba rápida (formulario, menú y un envío) cada vez que actualices WooCommerce o tu tema, que es justo cuando estas cosas se rompen sin avisar.
Mi opinión honesta
¿Merece la pena la retirada del pedido nativa de WooCommerce o es mejor ir a por un plugin? Te lo digo sin rodeos: para salir del paso está bien, pero no es lo que yo usaría.
Lo bueno de la opción nativa:
- Es gratis y viene en el core. No añades otro plugin con sus actualizaciones y sus posibles conflictos.
- El formulario cumple lo esencial. Funciona sin iniciar sesión, tiene el paso de revisión y el acuse incluye la fecha y la hora.
- Es prudente. No cancela pedidos ni devuelve dinero por su cuenta, así que nadie se aprovecha de un reembolso automático.
Por qué yo no me quedaría aquí:
- No controla los plazos. WooCommerce no sabe cuándo se entregó el pedido, así que acepta solicitudes de cualquier antigüedad y solo te avisa cuando han pasado 14 días desde la compra. Cada caso lo tienes que comprobar tú a mano.
- El cliente escribe el pedido a mano. Teclea el número y el email, y con un solo error la solicitud llega sin vincular. Un buen sistema de devoluciones parte del historial de pedidos del cliente: elige el pedido y los productos con un clic y todo queda asociado.
- No sabe qué se puede devolver. Los productos concretos llegan en un campo de texto libre y no hay forma de excluir los que no admiten desistimiento.
- No hay listado ni estados. Todo vive en notas, emails y avisos del panel. Nada de solicitudes pendientes, aceptadas o rechazadas en una sola pantalla.
- Necesita ayuda para cumplir. Sin los snippets de esta guía, el botón no se ve en ningún sitio y el texto final dice «Confirmar retirada».
Mi veredicto: si tu tienda no puede invertir ahora mismo en un plugin o un servicio de devoluciones, la función nativa con los snippets de esta guía te deja cubierto, y es muchísimo mejor que no tener nada. Pero si puedes, mi recomendación personal es ir a por una herramienta de devoluciones completa, gratuita o de pago, que te dé el control de los plazos, asocie cada solicitud a su pedido y te deje gestionar los estados. En mi artículo de reembolsos y devoluciones en WooCommerce te explico las opciones que uso: YITH Advanced Refund System, un plugin de pago muy completo, y Reveni, una plataforma externa que es mi preferida.
Eso sí, elijas lo que elijas, comprueba tres cosas antes de dar el paso:
- Que cumpla el artículo 11 bis. El texto «Desistir del contrato aquí», el paso de «Confirmar desistimiento» y el acuse con fecha y hora. Muchos sistemas de devoluciones nacieron antes de la directiva y puede que no lo traigan de serie.
- Que funcione para compras como invitado. Si el sistema solo trabaja desde Mi cuenta, los clientes que no se registraron se quedan sin botón, y la ley también les protege a ellos.
- Que no tengas dos formularios para lo mismo. Si usas un plugin o un servicio, mi consejo es dejar desactivada la función nativa para no confundir al cliente.
Y una predicción: WooCommerce irá completando esta función en próximas versiones. Cuando lo haga, actualizaré este artículo y te diré si cambia mi veredicto.
Conclusión
El botón de desistimiento ha llegado para quedarse. La directiva europea ya se aplica desde el 19 de junio de 2026 y, aunque España vaya con retraso, es cuestión de tiempo que la ley española lo recoja con todas las letras.
La buena noticia es que con WooCommerce lo tienes muy a mano. Si haces lo que hemos visto en esta guía, tu tienda queda lista en una tarde:
- Activa la retirada del pedido y ponle una URL en español.
- Deja activados los dos emails y revisa la zona horaria.
- Añade los snippets para que el botón se vea en Mi cuenta, en el pie de página y en los emails, y para que diga «Confirmar desistimiento».
- Actualiza tus textos legales con el párrafo nuevo.
- Pruébalo todo en staging antes de llevarlo a tu tienda.
Y recuerda la idea con la que empezamos: la ley no te pide que regales nada, te pide que no escondas la puerta de salida. Una tienda que pone fácil echarse atrás es una tienda que transmite confianza, y la confianza vende.
¿Te ha surgido alguna duda al configurarlo, o en tu tienda pasa algo que no he contemplado? Déjamelo en los comentarios. Y si prefieres que te ayude a dejarlo todo listo, puedes contactar conmigo.