APG Withdrawal for WooCommerce

Descripción

APG Withdrawal for WooCommerce añade a tu tienda WooCommerce un flujo de trabajo completo en línea para el derecho de desistimiento, conforme a la legislación de protección al consumidor de la UE.

Características

  • Formulario de desistimiento para el cliente mediante el shortcode [apg_withdrawal_form].
  • Período de desistimiento (días) y fuente del plazo (fecha de completado o de creación) configurables.
  • Días de gracia adicionales opcionales sobre el período de desistimiento estándar.
  • Detección de solicitudes activas: oculta el botón de desistimiento si ya hay una solicitud abierta para el pedido.
  • Casilla opcional de renuncia al desistimiento de contenido digital en el checkout (tanto en el shortcode clásico como en el checkout basado en bloques): un selector configurable elige cuándo mostrarla — nunca, solo en productos virtuales (o por producto _apg_withdrawal_type = digital), en todos los pedidos, o en categorías y/o productos seleccionados. La elección del cliente se persiste en el meta del pedido como evidencia legal.
  • Registro de solicitudes en el administrador con todos los detalles de la solicitud (custom post type).
  • Opciones de almacenamiento de la dirección IP y del identificador de navegador como evidencia legal.
  • Notificación por correo electrónico al administrador de la tienda en cada nueva solicitud.
  • Correo electrónico automático de acuse de recibo al cliente al enviar la solicitud.
  • Correos electrónicos de actualización de estado al cliente cuando la solicitud se acepta, rechaza o completa.
  • Automatización: actualiza el estado de la solicitud de desistimiento automáticamente cuando el pedido de WooCommerce vinculado cambia de estado.
  • Integración de «Mi cuenta»: los clientes pueden ver el historial de sus solicitudes de retirada.
  • Exportación CSV de todas las solicitudes de desistimiento.
  • 100% compatible con HPOS (High-Performance Order Storage).

Traducciones

Más información

Puedes obtener más información sobre APG Desistimiento para WooCommerce en nuestra web oficial, y seguir el desarrollo en GitHub.

Agradecimientos

Gracias a todas las personas que usan el plugin, ayudan a mejorarlo, hacen una donación o nos animan con sus comentarios.

Si te resulta útil este plugin, puedes apoyar su desarrollo con una pequeña donación.

Servicios externos

Este plugin se conecta a la API de plugins de WordPress.org para obtener información sobre el plugin (como la valoración). Envía el slug del plugin al solicitar los datos. Más información: https://wordpress.org/about/privacy/

Capturas

  • Página de ajustes del plugin con opciones generales, reglas de automatización y notificaciones por correo electrónico al cliente.
  • Formulario de desistimiento del cliente en la página pública (compra como invitado).
  • Formulario de desistimiento integrado en el área de Mi cuenta con selector de pedido.
  • Listado de pedidos de Mi cuenta con la acción Solicitud de desistimiento en cada pedido.
  • Listado de desistimientos en el administrador con estado, alcance y referencia del pedido.
  • Pantalla de edición del desistimiento con todos los detalles de la solicitud y el historial de estados.

Bloques

Este plugin proporciona 2 bloques.

  • Withdrawal link
  • Withdrawal exclusion notice

Instalación

  1. Instala el plugin de alguna de las siguientes formas:
    • Sube la carpeta apg-withdrawal-for-woocommerce al directorio /wp-content/plugins/ vía FTP.
    • Sube el archivo ZIP completo a través de Plugins -> Añadir nuevo -> Subir en el panel de administración de WordPress.
    • Busca APG Withdrawal for WooCommerce en Plugins -> Añadir nuevo y haz clic en Instalar ahora.
  2. Activa el plugin a través del menú Plugins en el panel de administración de WordPress.
  3. Configura el plugin en WooCommerce -> Desistimiento o a través del enlace Ajustes en la página de plugins.
  4. Añade el shortcode [apg_withdrawal_form] a la página configurada como página de desistimiento en los ajustes.

FAQ

¿Cómo configuro el plugin?

En los ajustes del plugin puedes configurar el correo electrónico de notificación, la página de desistimiento, el período de desistimiento en días, la fuente del plazo (fecha de completado o de creación), los días de gracia adicionales y qué datos almacenar (dirección IP, identificador de navegador).

¿Es el plugin compatible con HPOS?

Sí. El plugin es totalmente compatible con WooCommerce High-Performance Order Storage.

¿Pueden los clientes invitados enviar una solicitud de desistimiento?

Sí. El formulario admite tanto clientes registrados (con datos rellenados previamente y selector de pedidos) como invitados (con búsqueda de sus pedidos por correo electrónico).

¿Dónde debo colocar el enlace de desistimiento?

La página del formulario de desistimiento se crea automáticamente al activar el plugin y contiene el shortcode [apg_withdrawal_form]. Para cumplir el Artículo 11 bis de la Directiva 2011/83/UE (añadido por la Directiva 2023/2673), el enlace a esa página debe estar bien visible y ser fácil de encontrar en la tienda. El plugin te ofrece varias herramientas para colocarlo; decidir dónde colocarlo es responsabilidad del comerciante (o de su diseñador web):

  • La URL fija de la página creada automáticamente, disponible en WooCommerce Desistimiento Página de desistimiento.
  • El shortcode [apg_withdrawal_link], con los atributos opcionales label, class y target, para insertar el enlace dentro de cualquier entrada, página, widget del pie o bloque HTML.
  • El bloque de Gutenberg equivalente Enlace de desistimiento para sitios construidos con el Full Site Editor.
  • La acción Solicitud de desistimiento que se añade automáticamente a cada pedido elegible en la tabla de Mi cuenta Pedidos.

Ubicaciones recomendadas habituales:

  • El pie de página del sitio, para que el enlace sea accesible desde cualquier página.
  • El menú Mi cuenta (la acción por pedido ya está añadida; también puedes añadir un elemento de menú de primer nivel que enlace al formulario público).
  • Las páginas de Condiciones generales / Política de privacidad, junto al resto de la información al consumidor exigida por el Artículo 6.1.h de la Directiva 2011/83/UE.
  • Los correos de pedido en procesamiento / completado (el plugin ya inyecta ahí el enlace automáticamente mediante woocommerce_email_after_order_table).

¿Cuánto tiempo debo conservar los registros de las solicitudes de desistimiento?

El plugin no borra automáticamente los registros de las solicitudes de desistimiento. Como recomendación general, consérvalos durante al menos 5 años desde su creación, plazo de prescripción habitual de las acciones contractuales y de consumo en muchas jurisdicciones de la UE. Comprueba siempre el plazo de conservación aplicable en tu país antes de borrar registros antiguos o de ejecutar el flujo de exportación CSV + desinstalación del plugin.

¿Dónde puedo obtener soporte?

APG Desistimiento para WooCommerce es un plugin gratuito. Art Project Group no presta soporte técnico gratuito, pero ofrece un servicio de soporte técnico de pago para la instalación y configuración.

Reseñas

No hay valoraciones para este plugin.

Colaboradores y desarrolladores

«APG Withdrawal for WooCommerce» es un software de código abierto. Las siguientes personas han colaborado con este plugin.

Colaboradores

«APG Withdrawal for WooCommerce» está traducido en 1 idioma. Gracias a los traductores por sus contribuciones.

Traduce «APG Withdrawal for WooCommerce» a tu idioma.

¿Interesado en el desarrollo?

Revisa el código , echa un vistazo al repositorio SVN o suscríbete al registro de desarrollo por RSS.

Registro de cambios

0.5.0

  • Cumplimiento de la Directiva (UE) 2023/2673 (que modifica la Directiva 2011/83/UE sobre derechos de los consumidores). El plugin pasa a cubrir las obligaciones adicionales introducidas por el nuevo Artículo 11 bis (función de desistimiento online) y los requisitos relacionados de información precontractual y carga de la prueba.
  • Meta a nivel de término Tipo de desistimiento en product_cat, con herencia automática en los productos que mantienen el valor «Desistimiento permitido (por defecto)». Cuando un producto pertenece a varias categorías con tipos en conflicto, gana el tipo más restrictivo (orden de prioridad: excluded > personalized > digital > manual > allowed).
  • Nuevo shortcode [apg_withdrawal_notice], bloque de Gutenberg equivalente apg-withdrawal/notice e inyección automática en woocommerce_single_product_summary (prioridad 20, entre el precio y el botón Añadir al carrito) que muestra el aviso de exclusión en la ficha del producto cuando el tipo de desistimiento efectivo es distinto de allowed.
  • Nueva sección de ajustes «Textos de aviso de exclusión» con una textarea editable por cada tipo no permitido (excluded, digital, personalized, manual) y un texto por defecto traducido para cada uno. Campo opcional por producto en la pestaña Desistimiento del producto para sobrescribir el aviso solo en ese producto.
  • Sección de ajustes «Renuncia al desistimiento de contenido digital» simplificada a un único selector excluyente con tres modos — Nunca (desactivado), En productos clasificados como contenido digital, En todos los pedidos — gobernado exclusivamente por el tipo de desistimiento por producto / por categoría. Las instalaciones con el modo virtual se migran a digital; el modo specific se migra a digital y las categorías / productos previamente seleccionados se marcan automáticamente con _apg_withdrawal_type = digital para preservar su comportamiento. Los ajustes antiguos digital_waiver_categories / digital_waiver_products dejan de respetarse a nivel de UI (una migración silenciosa única corre en init, marcada por la opción apg_withdrawal_migrated_to_0_5).
  • Nuevo modelo imprimible de formulario de desistimiento del Anexo I.B servido en ?apg_withdrawal_model_form=1 con estilos @media print, rellenado automáticamente con el nombre, la dirección y el correo electrónico de la tienda (de los ajustes de WooCommerce) y un teléfono del comerciante opcional (nuevo ajuste Teléfono del comerciante (opcional)). El formulario público de solicitud de desistimiento enlaza a él como «Descargar el modelo oficial de formulario de desistimiento (Anexo I.B)».
  • Nuevo shortcode [apg_withdrawal_link] y bloque Gutenberg apg-withdrawal/link que renderizan un enlace al formulario público de desistimiento con atributos opcionales label, class y target. La etiqueta por defecto usa el texto literal sugerido por el Artículo 11 bis(1) («Desistir del contrato aquí»). La acción por pedido de Mi cuenta pasa a usar ese mismo texto por defecto en instalaciones nuevas.
  • El correo electrónico de confirmación al cliente ahora incluye un hash SHA-256 verificable del contenido del recibo (calculado a partir del nombre, el correo electrónico, el pedido, el ámbito, los productos, los detalles y la marca de tiempo UTC) y la marca de tiempo UTC utilizada para la verificación. El hash y la marca de tiempo también se guardan en los metadatos de la entrada (_apg_withdrawal_receipt_hash, _apg_withdrawal_receipt_hash_timestamp) y se muestran en la exportación CSV.
  • El consentimiento de la casilla de renuncia digital en el checkout se persiste ahora como un log estructurado (meta del pedido _apg_withdrawal_digital_waiver_log) que incluye el texto exacto mostrado al cliente, timestamp UTC, IP, user agent y tipo de checkout (classic o block). El meta booleano legado _apg_withdrawal_digital_waiver se sigue escribiendo por retrocompatibilidad.
  • Indicador de entrega de correo electrónico: cada correo de cambio de estado y el acuse de recibo inicial al cliente ahora registran si se invocó wp_mail(), si devolvió un resultado satisfactorio (= «aceptado por el servidor de correo», no la entrega efectiva al destinatario), la marca de tiempo UTC y cualquier error capturado a través de wp_mail_failed. La información aparece en la pantalla de detalles de la solicitud y se exporta como dos columnas CSV adicionales.
  • Integración RGPD: el plugin registra ahora un exportador y un borrador de datos personales con las herramientas nativas de privacidad de WordPress. El borrador anonimiza las solicitudes de desistimiento (sustituye nombre, correo electrónico, teléfono, IP, user agent y el texto libre del cliente por [redactado]) y conserva la solicitud y su referencia _apg_withdrawal_wc_order_id como evidencia legal, conforme a la carga de la prueba del Artículo 16 bis(8). La misma anonimización se dispara automáticamente cuando se elimina un usuario de WordPress (desde Usuarios Borrar, desde un botón «Eliminar mi cuenta» añadido por plugins de terceros como apg-gdpr-texts-for-forms, o desde cualquier otro flujo), evitando que los registros de desistimiento sobrevivan al usuario con datos personales.
  • La exportación CSV se defiende ahora contra la inyección de fórmulas en hojas de cálculo: a las celdas cuyo primer carácter es =, +, -, @, tabulador o retorno de carro se les antepone un apóstrofe antes de escribirlas con fputcsv.
  • Nuevas entradas de FAQ que documentan dónde debe colocar el enlace al formulario de desistimiento el comerciante o su diseñador web y que recomiendan un plazo mínimo de conservación de 5 años para los registros de solicitudes de desistimiento.

0.4.0

  • Nuevo ajuste «Texto personalizado de la casilla» en la sección Renuncia al desistimiento de contenido digital: permite al comerciante sobrescribir el texto por defecto de la casilla que se muestra en el checkout con una cadena de texto plano. Si se deja vacío se conserva el texto traducible por defecto.
  • La página por defecto que crea automáticamente el plugin pasa a usar el título «Exercise the right of withdrawal» (traducido como «Ejercer derecho de desistimiento» en español) y deja que WordPress derive el slug a partir del título. Las páginas existentes no se modifican; solo las instalaciones nuevas reciben el nuevo título y slug.
  • Interno: corregida la lista blanca de modos permitidos en el saneador de ajustes (disabled, virtual, all, specific) para que los valores coincidan con el selector de modos real.

0.3.0

  • Nuevo: casilla de renuncia al desistimiento de contenido digital en el checkout. Los clientes que compran contenido digital o servicios virtuales ven una aceptación opcional de que solicitar el suministro inmediato implica renunciar a su derecho de desistimiento (requisito de protección al consumidor de la UE). La casilla es informativa; marcarla no es obligatorio y no bloquea la finalización del pedido.
  • La casilla se inyecta en ambos checkouts: shortcode clásico (mediante woocommerce_checkout_before_terms_and_conditions con prioridad 999) y basado en bloques (mediante JavaScript que se reinserta con un MutationObserver para mantenerse justo antes de la casilla nativa de términos, después de cualquier otra casilla personalizada).
  • En el checkout de bloques, una pasada genérica de limpieza elimina el contenido inyectado junto a nuestro contenedor por plugins de terceros cuyos selectores son demasiado amplios (por ejemplo, plugins que usan .wp-block-woocommerce-checkout-terms-block .wc-block-components-checkbox junto con .after() de jQuery), evitando avisos de privacidad o marketing duplicados.
  • La elección del cliente se persiste en el meta del pedido _apg_withdrawal_digital_waiver ('1' o '0') en ambos checkouts: el checkout clásico lee el valor del POST en woocommerce_checkout_create_order, el checkout de bloques inyecta el valor en el cuerpo de la petición StoreAPI bajo extensions['apg-withdrawal']['digital_waiver'] y el hook del servidor woocommerce_store_api_checkout_update_order_from_request escribe el mismo meta.
  • El script del checkout de bloques reacciona a los cambios del carrito durante el checkout: observa las mutaciones del carrito vía StoreAPI y, mediante un endpoint AJAX con nonce (apg_withdrawal_check_cart_waiver), vuelve a comprobar en el servidor si el carrito actual sigue siendo válido, insertando o eliminando la casilla sin recargar la página.
  • Nueva sección de ajustes «Renuncia al desistimiento de contenido digital» con un único selector SelectWoo para cuándo mostrar la casilla: nunca (por defecto), solo en productos virtuales, en todos los pedidos, o en productos de categorías seleccionadas o en productos seleccionados (estos dos pueden combinarse). Los selectores de categoría y de producto solo se cargan cuando son relevantes. El modo «Solo en productos virtuales» también coincide con productos que tengan el ajuste por producto _apg_withdrawal_type = digital, de modo que el indicador de virtual y la clasificación digital explícita se tratan como disparadores equivalentes.

0.2.0

  • El formulario del frontend hereda ahora la hoja de estilos nativa de WooCommerce (avisos, campos, botones) sin necesidad de sobrescrituras de CSS personalizadas.
  • Los avisos se renderizan con wc_print_notice() para que tomen la plantilla correcta de WooCommerce tanto en temas de bloques (block-notices/*.php) como en temas clásicos (notices/*.php).
  • Los avisos dinámicos (indicación de pedido no encontrado y advertencia de producto) se pre-renderizan en el servidor mediante wc_print_notice() y se alternan por JavaScript, en lugar de construirse a mano con marcado heredado que se rompe en temas de bloques.
  • La indicación de pedido no encontrado sigue el patrón nativo de WooCommerce: aviso en la parte superior del formulario más la clase woocommerce-invalid en el campo de correo electrónico.
  • Los botones usan wc_wp_theme_get_element_class_name( 'button' ) para garantizar la compatibilidad con temas clásicos y temas de bloques.
  • Eliminado el CSS en línea inyectado desde JavaScript en favor de las clases de aviso nativas de WooCommerce.
  • Traducción al español actualizada al tratamiento informal de «tú» siguiendo la recomendación de la guía de estilo de WooCommerce.

0.1.0

  • Versión inicial.