From 19 June 2026, EU Directive 2023/2673 requires online stores across the European Union to
provide a
digital withdrawal function: a way to cancel a distance contract online that is at
least as easy to use as the purchase flow itself. A single "cancel" button is not enough. The law
requires a clearly labelled, continuously available function, a two-step confirmation, and an
acknowledgement on a durable medium whose timestamp fixes the legal moment of communication.
ErreD EU Order Withdrawal for WooCommerce implements that function end to end — not just the
button, but the declaration flow, the two-step confirmation, the durable-medium receipt, the
eligibility rules and the merchant review tools needed to actually comply.
It ships the Italian transposition out of the box (art. 54-bis of the Codice del Consumo,
introduced by D.Lgs. 209/2025) with the legally-fixed label «recedere dal contratto qui», and it
is fully translatable for other EU markets.
The plugin does not create a right of withdrawal: it provides the online channel to exercise an
existing one, honouring the legal exceptions (e.g. art. 59 in Italy). It is built security-first,
is WooCommerce High-Performance Order Storage (HPOS) native, and works fully offline (no external
service calls).
For consumers
- A clearly labelled, continuously available withdrawal function on the My Account orders screen.
- A two-step declaration and confirmation flow ("conferma recesso"), server-rendered so it works
even with JavaScript disabled.
- An acknowledgement on a durable medium (email plus a stored PDF receipt) whose timestamp fixes
the moment of communication — the legal start date (dies a quo) for refund deadlines.
- Reachable by guest-checkout customers through a per-order signed link in their order emails and on
the order-received page, with no order enumeration.
For merchants
- A React admin screen to review requests, filter by status, search by order, name or email, view
the audit timeline, view/regenerate the durable receipt and mark requests refunded or rejected.
- A menu badge counting the requests awaiting action.
- A conservative, configurable eligibility engine (withdrawal window, start trigger, per-product
and per-category exclusions) that fails closed when configuration is missing.
- Optional WooCommerce Subscriptions support: a confirmed withdrawal cancels the subscription
(status transition only — subscription data is never deleted).
- An append-only audit trail and tamper-evident receipts (SHA-256 of the receipt payload).
Built to standard
- Security-first: capability + nonce/REST permission checks and input sanitisation / output
escaping on every privileged path; signed, rate-limited guest access.
- Accessibility: WCAG 2.2 AA, verified with automated axe checks.
- Fully translatable; ships a complete Italian (it_IT) translation.
This plugin encodes legal and security intent; it is not legal advice. The mapping of the art. 59
exceptions to your catalogue and the durable-medium content must be validated by a qualified legal
professional before relying on them.
0.5.4
Admin menu entries now default to English for non-Italian sites; Italian labels are unchanged via
the bundled translation. No data migration required.
0.5.3
Safer uninstall: only the page the plugin itself auto-created can be removed when deleting data on
uninstall; a page you selected yourself in settings is never touched. No data migration required.
0.5.2
A single, correctly-working withdrawal button for guests and members, a tidier styled confirmation
step, and admin improvements: abandoned (unconfirmed) requests are hidden and restartable, and the
menu badge counts all open requests with the standard styling. No data migration required.
0.5.1
Bundles the full JS/CSS source alongside the compiled assets and links the public development
repository, updates the bundled Dompdf to 3.1.5, and hardens the admin receipt download and the
product withdrawal-status save. No data migration required.
0.5.0
Adds a withdrawal-status column to the orders screen and replaces the request detail panel's action
buttons with a single "Set status" dropdown plus a "Save status" button. No data migration required.
0.4.0
Richer per-product/category withdrawal status (art. 59 exceptions), a post-activation welcome notice, a
reorganised settings screen, and a redesigned Annex I.B model form. No data migration required.
0.3.1
Fixes the in-place schema upgrade (empty requests list / blank withdrawal submission after updating to
0.3.0) and prevents the withdrawal form from white-screening on a transient error.
0.3.0
Adds art. 59 product/category configuration, checkout consents, the Annex I.B model form, status
emails, admin actions/stats/CSV export, GDPR tools and more. Adds two optional database columns
(applied automatically). Review the new settings under Recesso digitale → Settings.
0.2.0
Clearer withdrawal page (checkbox product picker with thumbnails and per-product quantities) and a
fuller durable-medium acknowledgement that lists the selected products. No data migration required.
0.1.0
Initial release.