BuddyPilot Withdrawal (Easy Returns)

Descripción

BuddyPilot Withdrawal para WooCommerce implementa la función de desistimiento obligatoria requerida por el Artículo 11a de la Directiva UE 2023/2673 para vendedores en línea que venden a consumidores de la UE.

A partir del 19 de junio de 2026, todas las tiendas WooCommerce con clientes de la UE deben proporcionar una función de desistimiento claramente visible y fácilmente accesible (botón «desistir del contrato aquí») junto con los requisitos de información de derecho de desistimiento existentes.

Lo que hace el plugin

Orientado al cliente

  • Botón conforme al Artículo 11a «Desistir del contrato aquí» en la página de detalle de pedido de Mi Cuenta
  • Formulario de desistimiento de dos pasos: selección de artículos, vista previa de declaración, confirmación de un clic
  • Soporte de producto variable: cada variante (tamaño, color, etc.) aparece con sus etiquetas de atributo completas como una línea separada en el formulario de desistimiento
  • Soporte de pago de invitado a través de flujo de verificación directa (correo electrónico + número de pedido, sin inicio de sesión requerido)
  • Historial de desistimiento de Mi Cuenta lista y página de detalle de declaración
  • Captura de consentimiento del Artículo 16(m) en el pago para bienes digitales y virtuales (configurable: requerido, opcional u oculto)
  • Correo de declaración del cliente que sirve como reconocimiento de medio duradero requerido por el Artículo 11a(3)
  • Correo electrónico de desistimiento resuelto enviado al cliente después de que el operador cierre la declaración; incluye el enlace a la plataforma ODR de la UE (ec.europa.eu/consumers/odr) cuando se rechaza algún artículo
  • Estado de resolución por artículo visible en el formulario de desistimiento cuando se cierra una declaración: cada artículo muestra un distintivo «aceptado» o «rechazado» con el motivo del rechazo y el enlace ODR, para que el cliente entienda el resultado sin tener que contactar con el servicio de atención al cliente

Orientado al operador

  • Metabox de edición de pedido para registrar declaraciones recibidas por teléfono, correo o en persona
  • Página independiente «Añadir nueva declaración» para colas de operadores de alto volumen sin salir de la lista de declaraciones
  • Lista de declaraciones con búsqueda, filtrado y ordenamiento en el administrador de WooCommerce
  • Página de detalle de la declaración con historial de auditoría completo y flujo de trabajo de resolución: aceptar todos, rechazar todos o resolución parcial con decisiones por artículo y motivos de rechazo individuales
  • Correo de notificación del administrador enviado inmediatamente cuando un cliente presenta un desistimiento

Legal y cumplimiento

  • Estado de pedido personalizado wc-withdrawal (opcional, registrado por el plugin) con un historial de cambios completo registrado como notas de pedido de WooCommerce
  • Página de información de desistimiento Anexo I(A) disponible para generar con un clic desde Ajustes
  • Página de formulario de desistimiento modelo Anexo I(B) disponible para generar con un clic desde Ajustes, publicada como página de WordPress y vinculada automáticamente desde correos de pedidos y Mi Cuenta
  • Período de reembolso configurable (14 días por defecto, coincide con tus términos de contrato)
  • Estados «entregados» configurables que inician el contador de desistimiento
  • Atribución de costos de devolución (paga el consumidor o el vendedor, según los requisitos del Anexo I(A))
  • Exportación y anonimización de datos personales RGPD compatible con herramientas de privacidad de WordPress
  • Compatibilidad HPOS (High-Performance Order Storage) y modo post-meta heredado
  • Cumplimiento de accesibilidad WCAG 2.2 AA en todos los formularios orientados al cliente
  • Se incluyen traducciones al polaco e inglés

Complemento Pro

La funcionalidad extendida está disponible a través del complemento BuddyPilot Withdrawal Pro:

  • Reembolso automático aprobado por el operador, generado a partir de los artículos declarados (un clic desde la pantalla de declaración)
  • Verificación del contador de descargas: restaura el derecho de desistimiento cuando un producto digital nunca fue descargado realmente, reduciendo la denegación injustificada de reembolsos
  • Compatibilidad con WooCommerce Subscriptions: cancela las renovaciones futuras y prorratea el período de facturación actual conforme al Article 9(2)(b)(iii)
  • Compatibilidad con WooCommerce Product Bundles: gestión automática según el tipo de paquete. Para los paquetes por artículo con un descuento configurado, elija si las devoluciones parciales conservan el importe pagado o pierden el descuento completo del paquete
  • Exportación en PDF de la declaración legal de desistimiento
  • Generación del formulario Annex I(B) por país

Instalación

  1. Carga la carpeta del plugin a /wp-content/plugins/ o instala a través de Plugins > Añadir nuevo.
  2. Activa el plugin a través del menú Plugins en WordPress.
  3. Ve a WooCommerce > Ajustes > Desistimiento y configura:
    • General: período de desistimiento, período de gracia, estados entregados
    • Detalles del vendedor: nombre, dirección, dirección de devolución, responsabilidad de costos de devolución
    • Experiencia del cliente: modo de consentimiento para bienes digitales, página de información de desistimiento
  4. En la sección Experiencia del cliente haz clic en «Crear página de información de desistimiento» para publicar una nota conforme a la UE Anexo I(A) y un formulario modelo Anexo I(B). La URL de la página se vincula automáticamente desde los correos de pedidos y la pantalla de visualización de pedidos de Mi Cuenta.
  5. Los clientes elegibles para desistirse verán una llamada a la acción «Desistir del contrato aquí» en su página de pedido. El formulario funciona sin JavaScript.

FAQ

¿Funciona el plugin con el pago como invitado?

Sí. Crea una página de formulario de desistimiento dedicada desde WooCommerce > Ajustes > Desistimiento > Cliente (un clic). Coloca el código [buddypilot_withdrawal_guest_form] en esa página. Los clientes invitados introducen su número de pedido y correo electrónico de facturación; se envía un enlace seguro a la dirección de facturación. Al hacer clic en el enlace se abre el formulario de desistimiento interactivo completo sin necesidad de cuenta.

¿Procesa el plugin los reembolsos automáticamente?

La versión gratuita registra la declaración de desistimiento y cambia el estado del pedido a wc-withdrawal. El operador procesa el reembolso utilizando herramientas nativas de WooCommerce. El reembolso automático de un clic construido a partir de artículos declarados está disponible en el complemento Pro.

¿Qué NO hace el plugin?

El plugin registra las declaraciones de desistimiento como documentos legales y notifica tanto al cliente como al operador. No reembolsa dinero automáticamente, ni verifica los envíos de devolución, ni aplica plazos de reembolso, ni gestiona la contabilidad y el IVA. El operador de la tienda es responsable de procesar el reembolso dentro del período legalmente exigido (14 días por defecto, configurable en WooCommerce > Ajustes > Withdrawal > General).

¿El plugin es compatible con productos variables?

Sí, sin necesidad de configuración adicional. Los productos variables (diferentes tamaños, colores, etc.) son totalmente compatibles en la versión gratuita. Cada variante aparece en el formulario de desistimiento como una línea separada con sus etiquetas de atributo completas (por ejemplo, Camiseta, Tamaño: L, Color: Negro), por lo que el cliente especifica exactamente qué está devolviendo y el operador ve el mismo detalle en la lista de declaraciones y la página de detalle de la declaración.

¿El plugin funciona con WooCommerce Subscriptions o Product Bundles?

La gestión de suscripciones, paquetes y productos compuestos (cancelación de renovaciones, prorrateo, modos de reembolso de paquetes) forma parte del complemento Pro. La versión gratuita los trata como productos estándar.

¿Cubre el plugin el consentimiento del Article 16(m) para bienes digitales?

Sí. El plugin añade una casilla de consentimiento explícito en el pago cuando el carrito contiene productos descargables o virtuales. El operador puede elegir entre «obligatorio antes de la compra», «opcional» u «oculto» (el comerciante renuncia a la exclusión). El consentimiento se registra en el pedido y se muestra en el formulario de desistimiento.

¿Cuándo empieza el plazo de desistimiento?

El contador comienza en el momento exacto en que el estado del pedido cambia a uno de los estados «entregados» configurados en WooCommerce > Ajustes > Desistimiento > General. El plugin registra la marca de tiempo exacta de ese cambio de estado. Mientras el plazo no haya vencido, el cliente ve cuántos días le quedan en el formulario de desistimiento; una vez que el plazo vence, el botón de desistimiento ya no se muestra. Cualquier estado de pedido integrado o personalizado de WooCommerce se puede asignar como un disparador «entregado» (por ejemplo, «Completado», un estado «Enviado» personalizado, etc.). Dejar la lista vacía significa que el contador nunca comienza, lo cual es útil durante las pruebas o cuando deseas que el desistimiento esté disponible indefinidamente.

¿El plugin es compatible con HPOS?

Sí. El plugin es totalmente compatible con WooCommerce High-Performance Order Storage (HPOS) y vuelve automáticamente al modo heredado post-meta.

Reseñas

19 de junio de 2026 1 respuesta
I tried many solutions out there before to choose this plugin but I have to say that this is the most complete and best overall. It covers many aspects that other ignores so this has been an easy choice
17 de junio de 2026 1 respuesta
Swietna i prosta wtyczka zapewniajaca zgodnosc z dyrektywa. Doskonaly kontakt z devem i reakcja na bledy/poprawki. Wtyczka praktycznie plug&play. Zainstaluj, aktywuj, sprawdz usatwienia gdybys chcial cos niestandarowego, podepnij shortcode i tyle… Bardzo polecam!
29 de mayo de 2026 1 respuesta
Bardzo dobra wtyczka. Rozwiązuje problem, który wiele sklepów będzie miało już niebawem. Dobry kontakt z autorem. Będę ją polecał moim klientom.
Leer todas las 3 reseñas

Colaboradores y desarrolladores

«BuddyPilot Withdrawal (Easy Returns)» es un software de código abierto. Las siguientes personas han colaborado con este plugin.

Colaboradores

«BuddyPilot Withdrawal (Easy Returns)» está traducido en 7 idiomas. Gracias a los traductores por sus contribuciones.

Traduce «BuddyPilot Withdrawal (Easy Returns)» 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

1.0.19

  • Fix: Recently added strings no longer appear in English on sites without an up-to-date language pack. The bundled translations were refreshed and expanded so every supported EU language now ships at the current plugin version. Community translations from the translate.wordpress.org language pack still take priority; the bundled copy only fills what the pack is missing.
  • Developer: The translation template (.pot) is now included in the package, so you can translate the plugin yourself (for example with Loco Translate) and keep a multilingual site consistent. No code or database changes, safe to update.

1.0.18

  • Feature: The original delivery cost is now refunded when the customer withdraws from every shipped item in an order (Article 13). The amount is shown to the customer on the confirmation step and in My Account, and is added to the Pro one-click refund. Delivery is still included when only virtual or downloadable items remain in the order; it is not added on a partial return of the physical goods. A new «Refund the original delivery cost» setting (on by default) controls this.
  • Improved: Customer-facing amounts are now shown gross (tax inclusive). The confirmation step and the My Account declaration view now show a refund summary: items, delivery, and the total to refund.
  • Improved: After submitting a withdrawal that includes physical goods, the customer is now reminded on the confirmation page to send the goods back to the seller.
  • Improved: The operator declaration screens now show the withdrawn items in WooCommerce’s familiar order-items layout (Product, Price, Quantity, Total, tax) with a totals summary (items subtotal, shipping, tax, total to refund).
  • Improved: The «Cost of returning the goods» setting was renamed to «Who pays to return the goods» and reworded to make clear it concerns the cost of sending the goods back, not the refund of the original delivery.
  • Developer: New buddypilot_withdrawal_shipping_refund_snapshot filter to adjust or suppress the delivery refund amount (for example to cap an express-delivery supplement). The public API version is now 1.1.

1.0.17

  • Improved: The My Account order page now lists every item with its withdrawal status, eligible, already withdrawn, or not eligible, above the withdrawal button. Digital items the customer consented to receive immediately (Article 16(m)) are shown with a «not eligible for withdrawal» badge instead of being silently omitted, and orders where no item is eligible now show the item list with that explanation instead of a generic message.
  • Improved: The withdrawal form shows the same read-only item list with badges when an order has no items eligible for withdrawal.
  • Improved: Bundled translations now fill any strings the translate.wordpress.org language pack is still missing, so strings added in a release appear in the site language immediately without waiting for the language pack to be updated. Community translations from the language pack keep priority.
  • Fixed: The rejection / partial-resolution email no longer shows two near-identical ADR / EU Online Dispute Resolution notices. The notice with the clickable link is kept; the duplicate default text was removed.

1.0.16

  • Fixed: The «right of withdrawal» link in the WooCommerce email footer and the My Account call-to-action now resolve to the correct language version of the information page on Polylang and WPML sites. Previously the stored page ID was used verbatim, so on multilingual stores the link could be missing or point to the wrong language.
  • Fixed: The withdrawal period and the refund deadline are now shown consistently across all screens. The My Account order button now reflects the configured withdrawal period instead of a hardcoded 14 days, the declaration preview and the post-submission confirmation now reflect the configured refund deadline instead of a hardcoded value or the wrong setting.
  • Fixed: The guest withdrawal flow now stays in the language the visitor is using on multilingual sites. Previously, after requesting an access link on a non-default language page, the form action, every following step and the e-mails fell back to the site default language. The form now recognises translated page variants, keeps each step on the current-language page, and sends both the magic-link e-mail and the withdrawal-confirmation e-mail in the visitor’s language (Polylang, WPML). The confirmation e-mail now also follows the customer’s language for logged-in My Account submissions; operator-registered declarations keep the site language.
  • Improved: The refund deadline option is now seeded on activation, so fresh installations report a consistent value before the operator visits the settings screen.

1.0.15

  • Feature: Guest magic-link emails now point to the correct language version of the withdrawal form on multilingual sites. Polylang, WPML, TranslatePress, Weglot, and qTranslate-XT are all supported automatically; the order language meta stored by each plugin is used to resolve the translated page URL.
  • Improved: Translation .mo files for all 24 EU official languages are now bundled in the plugin ZIP as a fallback. Users on sites where translate.wordpress.org has not yet published a language pack receive translated strings from the bundled .mo files instead of falling back to English.
  • Improved: Czech (cs_CZ), Croatian (hr), Dutch Belgium (nl_BE), Dutch Netherlands (nl_NL), and Romanian (ro_RO) translations synchronised with GlotPress (translate.wordpress.org); GlotPress-approved strings are now authoritative.

1.0.14

  • Feature: New buddypilot_withdrawal_has_consent filter allows third-party plugins to integrate their own Article 16(m) consent checkbox. Return true from the filter to record consent for all digital items in the order; the plugin handles the internal storage. No knowledge of internal meta keys is required.
  • Improved: When the plugin’s own consent checkbox is set to «Hidden» in settings, the new filter still fires. External consent can therefore be recorded even when the built-in checkbox is disabled.

1.0.13

  • Nueva función: Los operadores ahora pueden cerrar una declaración como «Rechazar todos los artículos» o «Resolución parcial» directamente desde la página de detalle de la declaración. Anteriormente, desde esa pantalla solo estaba disponible la aceptación total.
  • Nueva función: El modo de resolución parcial permite tomar una decisión de aceptación o rechazo por artículo, con un motivo de rechazo obligatorio para cada artículo rechazado, de modo que el cliente recibe un resultado detallado en lugar de una única decisión global.
  • Nueva función: Los correos electrónicos de rechazo y resolución parcial incluyen ahora el enlace a la plataforma ODR (Resolución de Litigios en Línea) de la UE (ec.europa.eu/consumers/odr), tal como exige el Article 11a para las notificaciones de litigios transfronterizos.
  • Nueva función: El formulario de desistimiento visible para el cliente muestra ahora distintivos de resolución por artículo en las declaraciones totalmente resueltas: los artículos aceptados muestran un distintivo de confirmación, mientras que los rechazados muestran el motivo del rechazo y un enlace a la plataforma ODR. Anteriormente, el formulario mostraba un mensaje genérico de «pedido no admisible».
  • Mejora: Al reabrir una declaración ahora se restablecen a nulo el tipo de resolución y la nota del operador, de modo que el operador parte de cero al corregir una decisión errónea.
  • Seguridad: Los campos de instantánea financiera del registro de declaración (total del artículo, subtotal, impuesto) son inmutables; no pueden sobrescribirse mediante la manipulación de POST durante el paso de resolución.
  • Seguridad: El tipo de resolución se valida contra una lista blanca estricta en el servidor (accepted / rejected / partial); los valores arbitrarios se rechazan antes de llegar a la base de datos.
  • Seguridad: Las declaraciones ya cerradas rechazan los intentos de resolución obsoletos con un error explícito, evitando sobrescrituras accidentales en sesiones de operador simultáneas.

1.0.12

  • Corrección: La casilla de consentimiento del Article 16(m) no se mostraba en el pago en tiendas que usaban WooCommerce 8.6 o superior con un pago clásico basado en shortcodes (p. ej. tema Blocksy). El plugin ahora detecta correctamente si se utiliza el pago por bloques antes de enrutar la recogida del consentimiento a través de la API Additional Checkout Fields.
  • Mejora: La sesión de desistimiento de invitado ahora está limitada a 15 minutos después de hacer clic en el enlace mágico, reduciendo el período durante el cual una sesión de navegador compartida o inactiva podría ser utilizada de forma indebida.
  • Mejora: El endpoint de canje del enlace mágico aplica ahora limitación de velocidad por pedido y por IP, de forma coherente con el endpoint de verificación de correo electrónico.
  • Mejora: El detalle de declaración y el botón de cambio de estado en el panel de administración ahora verifican que el usuario actual tenga acceso al pedido vinculado, lo que proporciona un control de acceso correcto en configuraciones multiventa.
  • Mejora: El texto de la etiqueta de consentimiento personalizado por el operador se sanea al guardarse, de modo que el valor de la opción almacenada siempre es HTML limpio.
  • Mejora: El plugin ya no recopila ni almacena la cadena user-agent del navegador con las declaraciones de desistimiento. El campo no tenía ningún propósito activo y su eliminación reduce la huella de datos personales. En las instalaciones existentes, la columna se eliminará automáticamente en la primera carga después de la actualización (sin pérdida de datos; el registro legal de declaración se conserva íntegramente).

1.0.11

  • Corrección: El registro de clases de correo electrónico del plugin ahora está aislado por clase. Un fallo del constructor en una clase ya no se propaga al despacho de correo electrónico de WooCommerce y ya no bloquea todos los correos electrónicos transaccionales de WooCommerce (nuevo pedido, procesamiento de cliente, etc.).

1.0.10

  • Corrección: Intentar cambiar masivamente el estado de pedidos en estado de desistimiento a Completado o En procesamiento ahora activa un aviso de administrador que informa al operador de cuántos pedidos se omitieron porque el cambio de estado no está permitido para ellos, y de que esos pedidos deben gestionarse individualmente.

1.0.9

  • Nueva función: El formulario de verificación de invitados ahora acepta números de pedido personalizados de plugins de renumeración de terceros (p. ej. WebToffee Advanced Order Numbers, Custom Order Numbers for WooCommerce by Tyche Softwares). Los invitados pueden introducir el número formateado que aparece en su correo electrónico de confirmación en lugar del ID de pedido numérico interno.
  • Nueva función: El campo de número de pedido en el formulario de verificación de invitados ya no fuerza un teclado solo numérico en dispositivos móviles, lo que permite a los invitados escribir números de pedido con prefijo como ORD-2024-1042.
  • Seguridad: La longitud de la entrada en el formulario de verificación de invitados ahora está limitada antes de la resolución del pedido, evitando que solicitudes manipuladas provoquen escaneos completos de la base de datos en tiendas con plugins de números de pedido personalizados instalados.

1.0.8

  • Nueva función: La página de información sobre desistimiento ahora se crea como bloques nativos de WordPress, lo que permite al operador editar libremente el texto legal directamente en el editor de bloques.
  • Nueva función: El nuevo shortcode [buddypilot_withdrawal_info_block] renderiza las secciones dinámicas (datos de contacto del comerciante, dirección de devolución, botón CTA) de forma independiente para que siempre reflejen la configuración actual, incluso tras ediciones manuales del texto circundante.
  • Característica: El nuevo botón «Sobrescribir contenido de página de información» en WooCommerce > Ajustes > Desistimiento > Cliente actualiza la página con la última redacción de aviso modelo en cualquier momento.
  • Corrección: Los pedidos importados a través de la API REST de WooCommerce (p. ej. BaseLinker) se reimportaban en bucle porque el plugin escribía metadatos de consentimiento innecesarios en cada nuevo pedido. El plugin ya no escribe ningún metadato en los pedidos creados por la API que no contengan artículos digitales.

1.0.7

  • Mejora: El seguimiento de entregas ahora utiliza una tabla de base de datos dedicada en lugar de metadatos del pedido, lo que evita que las integraciones de sincronización de pedidos de terceros (p. ej. BaseLinker) reimporte los pedidos en cada actualización del estado de entrega.
  • Mejora: La pantalla de confirmación ahora lee el período de desistimiento configurado de forma dinámica en lugar de utilizar un valor fijo.
  • Mejora: La limitación de velocidad ahora se gestiona con una única operación atómica en la base de datos.
  • Mejora: Se han reducido las consultas a la base de datos en la página de lista de desistimientos.
  • Corrección: Varios problemas de estándares de código y refuerzo de seguridad menor.

1.0.6

  • Nueva función: Los clientes invitados (no registrados) ahora pueden enviar una declaración de desistimiento directamente desde una página de formulario dedicada. Tras introducir su número de pedido y su correo electrónico de facturación, se envía un enlace mágico seguro de un solo uso a la dirección de facturación; al hacer clic en él se abre el formulario de desistimiento interactivo completo sin necesidad de cuenta.
  • Característica: nuevo shortcode [buddypilot_withdrawal_guest_form] para la página del formulario de desistimiento de invitado. La página y el código corto se pueden crear con un clic desde WooCommerce > Ajustes > Desistimiento > Cliente.
  • Característica: el shortcode [buddypilot_withdrawal_information] ahora muestra un botón de llamada a la acción «Enviar formulario de desistimiento en línea» opcional que enlaza a la página del formulario de invitado cuando se configura la página del formulario. Las páginas de información existentes no se modifican.
  • Característica: nuevo correo transaccional «Enlace de acceso a formulario de desistimiento (invitado)» que contiene el enlace seguro; configurable en WooCommerce > Ajustes > Correos.

1.0.5

  • El plugin ha sido renombrado a BuddyPilot Withdrawal (Easy Returns) para mejorar su visibilidad.
  • Se han añadido traducciones completas para los 24 idiomas oficiales de la UE: bg, cs, da, de (de_DE, de_AT, de_CH), el, es, et, fi, fr (fr_FR, fr_BE, fr_CH), ga, hr, hu, it, lt, lv, mt, nl (nl_NL, nl_BE), pl, pt, ro, sk, sl, sv.
  • Calidad de la traducción: todos los 24 archivos de idiomas de la UE auditados en tres rondas; terminología legal verificada contra los boletines oficiales nacionales (Directiva UE 2011/83/UE Anexo I), signos diacríticos restaurados, registro formal aplicado en todo momento, formas plurales corregidas y coherencia interna mejorada.

1.0.4

  • Nueva función: Las cantidades fraccionarias de productos ahora se detectan y notifican en la declaración de desistimiento. El manejo completo de cantidades fraccionarias (prorrateo correcto, cálculo de reembolso) está disponible en BuddyPilot Withdrawal Pro.
  • Nueva función: Se ha añadido el enlace de acción «Actualizar a Pro» en la lista de Plugins, que se muestra solo cuando la versión Pro no está activa.

1.0.3

  • Probado y confirmada la compatibilidad con WordPress 7.0.
  • Seguridad: El nonce ahora se verifica antes de consumir un slot de limitación de velocidad, evitando que los sondeos CSRF agoten el presupuesto por hora de un usuario.
  • Seguridad: los depósitos de límite de velocidad anónimos (invitado) ahora se limitan por IP hash en lugar de un depósito user_id=0 compartido.
  • Seguridad: sealed_map e IDs preselados GET se validan contra el pedido antes del uso, evitando que solicitudes manipuladas adjunten confirmaciones selladas a artículos ordinarios.
  • Seguridad: la salida de apply_filters('buddypilot_withdrawal_declaration_items_payload') se revalida: las entradas con item_id=0, cantidades negativas o valores que no son matrices se eliminan.
  • Seguridad: PermissionChecker ahora bloquea explícitamente user_id=0 independientemente del customer_id del pedido.
  • Seguridad: OperatorRegistration comprueba EXCLUDED_STATUSES en la entrada del manejador y vacía la caché de permisos después de guardar el pedido.
  • Seguridad: DeclarationRepository valida el formato filing_date y rechaza cadenas de fecha cero.
  • Seguridad: RateLimit::tally() devuelve PHP_INT_MAX cuando falta la tabla de límite de velocidad, evitando que el limitador se convierta silenciosamente en una no-operación.
  • Solución: round(qty, 10) en get_declared_quantities() previene la acumulación de épsilon IEEE-754 en cantidades de productos fraccionarios.
  • Solución: se eliminó el gancho user_register espurio del Privacy Manager; solo se usa woocommerce_created_customer.

1.0.2

  • Código: se renombraron todos los identificadores cortos bpw_ / bpw- al prefijo completo buddypilot_withdrawal_ / buddypilot-withdrawal- en todo: afecta nombres de acciones AJAX/admin-post, identificadores de scripts, objeto JS localizado, ID de metabox, tipo de campo WooCommerce, nombres de campo nonce, claves de bloqueo y parámetros GET. Resuelve el requisito de revisión de prefijo único de WordPress.org.

1.0.1

  • Seguridad: Todos los manejadores de solicitudes de administrador y AJAX ahora verifican los permisos de usuario antes de la verificación del nonce, de acuerdo con las directrices de seguridad de WordPress.
  • Seguridad: la ruta AJAX en el manejador de registro del operador ahora usa check_ajax_referer() en lugar de check_admin_referer(), devolviendo una respuesta de error AJAX adecuada en caso de fallo de nonce.
  • Seguridad: se añadió la puerta current_user_can() al manejador de notificación del administrador para el estado de creación de página de información.
  • Seguridad: Los valores del símbolo de moneda y del separador de los datos de formato de precio localizado ahora se escapan en el lado de JavaScript antes de insertarse en el DOM.
  • Código: se movió JavaScript en línea de la plantilla de registro del operador a un archivo encolado (assets/js/admin/operator-registration.js); cadenas pasadas a través de wp_localize_script().
  • Código: se eliminó la llamada a load_plugin_textdomain(); WordPress 4.6 y posterior carga traducciones automáticamente para plugins alojados en WordPress.org.

1.0.0

  • Primera versión estable. Implementación completa de la función de desistimiento del Article 11a: formulario de dos pasos, verificación de invitados, registro manual del operador, lista de administración de declaraciones, período configurable y estados de entrega, captura de consentimiento del Article 16(m), generador de páginas Annex I(A)/(B), correos electrónicos para clientes y administradores, historial de desistimientos en Mi cuenta, compatibilidad con HPOS, hooks GDPR, cumplimiento WCAG 2.2 AA, y traducciones al polaco y al inglés.