Right of withdrawal from the contract
La Directiva de la UE 2023/2673 introduce nuevas obligaciones relativas al derecho de desistimiento (a partir del 19 de junio de 2026). El plugin gestiona todo el proceso - formulario del cliente, confirmaciones por correo electrónico, exclusiones de productos y hooks para desarrolladores.
Requisitos legales
Section titled “Requisitos legales”Un consumidor puede desistir de un contrato a distancia en un plazo de 14 días sin indicar ningún motivo. Como vendedor, usted debe:
- Informar al consumidor sobre el derecho de desistimiento antes de la celebración del contrato
- Facilitar un formulario de desistimiento
- Confirmar la recepción de la declaración de desistimiento
- Reembolsar el pago en un plazo de 14 días desde la recepción de la declaración
La Directiva 2023/2673 añade el requisito de un proceso digital para la presentación de declaraciones y de confirmaciones automáticas.
Proceso del cliente
Section titled “Proceso del cliente”Paso 1 - botón en Mi cuenta
Section titled “Paso 1 - botón en Mi cuenta”Tras activar el módulo, aparece un botón “Desistir del contrato” en Mi cuenta > Pedidos junto a los pedidos aptos para devolución. El botón es visible durante 14 días desde la entrega.

Paso 2 - formulario de desistimiento
Section titled “Paso 2 - formulario de desistimiento”Tras hacer clic en el botón, el cliente ve un formulario con los campos:
- Número de pedido (rellenado automáticamente)
- Fecha del pedido
- Lista de productos del pedido (con la posibilidad de seleccionar de cuáles desistir)
- Motivo del desistimiento (opcional)
- Datos de contacto del cliente
- Número de cuenta bancaria para el reembolso
Paso 3 - confirmación por correo electrónico
Section titled “Paso 3 - confirmación por correo electrónico”Tras enviar el formulario, el sistema automáticamente:
- Envía al cliente un correo electrónico confirmando la recepción de la declaración de desistimiento
- Envía al administrador de la tienda una notificación sobre el nuevo envío
- Cambia el estado del envío a “Pendiente”
A continuación, tramite el envío en el panel de WooCommerce y márquelo como completado.
Exclusiones de productos
Section titled “Exclusiones de productos”Algunos productos no están sujetos al derecho de desistimiento. Márquelos como excluidos en la pestaña Polski - Desistimiento en el editor de productos.
Exclusiones habituales según el artículo 38 de la Ley de Derechos del Consumidor:
- Productos hechos a medida o personalizados
- Productos perecederos
- Productos precintados por motivos de higiene (una vez abiertos)
- Grabaciones de audio/vídeo en embalaje precintado (una vez abiertas)
- Contenidos digitales entregados en línea (tras el inicio de la prestación)
- Prensa (periódicos, publicaciones periódicas, revistas)
En el caso de los productos excluidos, el botón “Desistir del contrato” no aparece en el panel del cliente.
Shortcode
Section titled “Shortcode”Utilice el shortcode [polski_withdrawal_form] para mostrar el formulario de desistimiento en cualquier parte del sitio.
Uso básico
Section titled “Uso básico”[polski_withdrawal_form]Muestra el formulario para el cliente que ha iniciado sesión. El cliente debe seleccionar un pedido de la lista.
Con un pedido concreto
Section titled “Con un pedido concreto”[polski_withdrawal_form order_id="789"]Muestra el formulario rellenado con los datos del ID de pedido indicado. El plugin comprueba que el usuario que ha iniciado sesión sea el propietario del pedido.
Ejemplo de inserción en una página
Section titled “Ejemplo de inserción en una página”Cree una página específica “Formulario de desistimiento del contrato” y coloque el shortcode:
[polski_withdrawal_form]En los ajustes (WooCommerce > Ajustes > Polski > Desistimiento) indique esta página como página de formulario predeterminada.
polski/withdrawal/requested
Section titled “polski/withdrawal/requested”Se activa cuando un cliente envía el formulario de desistimiento.
/** * @param int $withdrawal_id Withdrawal submission ID. * @param int $order_id WooCommerce order ID. * @param array $form_data Form data. */add_action('polski/withdrawal/requested', function (int $withdrawal_id, int $order_id, array $form_data): void { // Example: send notification to external CRM system $crm_api = new MyCrmApi(); $crm_api->notify_withdrawal($order_id, $form_data['reason']);}, 10, 3);polski/withdrawal/confirmed
Section titled “polski/withdrawal/confirmed”Se activa cuando el administrador confirma la recepción del envío.
/** * @param int $withdrawal_id Withdrawal submission ID. * @param int $order_id WooCommerce order ID. */add_action('polski/withdrawal/confirmed', function (int $withdrawal_id, int $order_id): void { // Example: change order status $order = wc_get_order($order_id); if ($order) { $order->update_status('withdrawal-confirmed', 'Withdrawal confirmed.'); }}, 10, 2);polski/withdrawal/completed
Section titled “polski/withdrawal/completed”Se activa cuando todo el proceso de desistimiento se ha completado (reembolso tramitado).
/** * @param int $withdrawal_id Withdrawal submission ID. * @param int $order_id WooCommerce order ID. * @param float $refund_amount Refund amount. */add_action('polski/withdrawal/completed', function (int $withdrawal_id, int $order_id, float $refund_amount): void { // Example: register refund in accounting system do_action('my_accounting/register_refund', $order_id, $refund_amount);}, 10, 3);polski/withdrawal/eligible
Section titled “polski/withdrawal/eligible”Filtro que permite determinar de forma programática si un pedido cumple los requisitos para el desistimiento.
/** * @param bool $is_eligible Whether the order qualifies for withdrawal. * @param WC_Order $order WooCommerce order object. * @return bool */add_filter('polski/withdrawal/eligible', function (bool $is_eligible, WC_Order $order): bool { // Example: exclude orders from the "services" category foreach ($order->get_items() as $item) { $product = $item->get_product(); if ($product && has_term('uslugi', 'product_cat', $product->get_id())) { return false; } } return $is_eligible;}, 10, 2);polski/withdrawal/period_days
Section titled “polski/withdrawal/period_days”Filtro que permite cambiar el plazo de desistimiento (14 días por defecto).
/** * @param int $days Number of days for withdrawal. * @param WC_Order $order WooCommerce order object. * @return int */add_filter('polski/withdrawal/period_days', function (int $days, WC_Order $order): int { // Example: extend period to 30 days during the holiday season $order_date = $order->get_date_created(); if ($order_date) { $month = (int) $order_date->format('m'); if ($month === 12) { return 30; } } return $days;}, 10, 2);polski/withdrawal/form_fields
Section titled “polski/withdrawal/form_fields”Filtro que permite modificar los campos del formulario de desistimiento.
/** * @param array $fields Array of form fields. * @return array */add_filter('polski/withdrawal/form_fields', function (array $fields): array { // Example: add a preferred refund method field $fields['refund_method'] = [ 'type' => 'select', 'label' => 'Preferred refund method', 'required' => true, 'options' => [ 'bank_transfer' => 'Bank transfer', 'original' => 'Same payment method', ], ]; return $fields;}, 10, 1);Administración de los envíos
Section titled “Administración de los envíos”Encontrará los envíos en WooCommerce > Desistimientos. Cada envío contiene:
- Número de pedido y enlace al pedido
- Fecha de envío del formulario
- Estado (pendiente, confirmado, completado, rechazado)
- Datos del cliente
- Lista de productos incluidos en el desistimiento
- Motivo (si se ha indicado)
Puede cambiar el estado, añadir una nota o tramitar el reembolso directamente desde el panel.
Clasificación del motivo mediante IA (opcional)
Section titled “Clasificación del motivo mediante IA (opcional)”Si activa WooCommerce > Ajustes > Polski > Funciones de IA, el plugin puede solicitar a un proveedor de WordPress AI Client configurado que clasifique cada motivo de texto libre en una categoría fija (defectuoso, artículo incorrecto, cambio de opinión, etc.). Está desactivado por defecto y el plugin nunca realiza la llamada de red por sí mismo.
Por transparencia (Reglamento de IA art. 50), la categoría se muestra en la lista con una marca explícita “clasificado automáticamente por IA”, de modo que un operador nunca confunda una categoría asignada por la IA con una decisión humana.
Resolución de problemas
Section titled “Resolución de problemas”El botón “Desistir del contrato” no se muestra Compruebe que: (1) el módulo está activado, (2) el pedido tiene el estado “Completado”, (3) el plazo de desistimiento no ha vencido, (4) ningún producto del pedido está excluido.
El cliente no recibe el correo de confirmación Compruebe la configuración de correo de WooCommerce en WooCommerce > Ajustes > Correos electrónicos y asegúrese de que la plantilla “Confirmación de desistimiento” está activada.
Próximos pasos
Section titled “Próximos pasos”- Notificar problemas: GitHub Issues
- Debates y preguntas: GitHub Discussions