Edoardo G.'s own description of WWU Right of Withdrawal for Popular Ecommerce Platforms, lightly tidied.
Product page & docs: webwakeup.it/wwu-withdrawal-button | source code, issues & contributions: GitHub
From 19 June 2026, EU law (Directive (EU) 2023/2673, new Art. 11a of the Consumer Rights Directive; Italy: Art. 54-bis Codice del Consumo) requires online stores to provide a withdrawal function that lets consumers withdraw from a distance contract as easily as they concluded it. WWU Withdrawal Button adds that function — and everything around it you need to run it and to prove you did it right — to WooCommerce, FluentCart and Easy Digital Downloads.
How it works (in plain terms)
- An eligible customer opens their order and clicks the statutory “Withdraw from contract here” button — in their account, from a link in the order e-mail, or on a public page (no account needed: they look the order up with its number + e-mail).
- A simple two-step form appears: they review what they are withdrawing from (optionally ticking only some items — partial withdrawal is allowed), then confirm. No reason required, no hoops.
- The instant they confirm, the customer receives an acknowledgement of receipt on a durable medium — an e-mail, a PDF copy and a permanent verifiable link — showing exactly what was withdrawn and the precise date and time. The order is flagged “withdrawal requested”.
- Every step is written to a tamper-evident, append-only log (hash-chained and timestamped) so you can prove what happened and when. You then handle the refund as usual — the plugin records that too.
That is the whole customer experience. Everything below exists to make it correct, easy to run, and defensible.
For your customers
- A prominently displayed, legible button with the exact statutory wording per language (IT, EN, DE, FR, ES, SV — extensible).
- The button appears where customers actually look: the account area (order list, order detail, a dedicated “Right of withdrawal” tab), a link inside order e-mails, a public self-service page with guest lookup, and anywhere via shortcodes or the Gutenberg block.
- A short, reassuring step-by-step guide during the flow (timing, refund, returns); the wording and the withdrawal window (≥14 days — you may grant more) are editable.
- When an order is genuinely exempt, a clear “why is the button not here” note explains the specific legal exception, instead of leaving the customer confused.
- A human-readable verification certificate for the receipt (integrity, order, date, hash) — not raw code.
For you (the merchant)
- An onboarding Dashboard with a setup checklist (one-click fixes), a plain “how it works” walkthrough, and a “where the button appears / why it might not” explainer.
- A one-click e-mail delivery test that detects your SMTP plugin and proves the receipt actually reaches the inbox — the #1 cause of “nothing happened”.
- A Requests dashboard to manage every withdrawal: status (open / processed / refunded), a chain-integrity badge, and one-click mark processed, resend receipt and open the order to refund (the refund is logged as proof you met the 14 days). Subscription and partial-withdrawal requests are flagged.
- A Compliance page: a go-live countdown, the statutory labels in use, the document checklist with ready-to-paste clauses, and environment warnings (Complianz / cache / multilingual) to fix.
- Receipts are real WooCommerce e-mails (your logo, colours, header) with a preview. The withdrawal button and form inherit your theme’s typography and colour presets out of the box, so they blend in automatically; for finer control, restyle every part from Appearance → Customize → Additional CSS (built into WordPress), targeting the plugin’s documented CSS variables and classes.
Smart legal handling (so you don’t have to think about it)
- Subscriptions — the law gives one 14-day right per contract, so the button shows on the initial order only and is hidden on renewals (WooCommerce Subscriptions, FluentCart, EDD Recurring). Fail-safe, with opt-in overrides.
- Partial withdrawal — customers can withdraw from only some items of an order.
- Art. 59 exemptions — tag products or categories by the specific statutory reason (events on a fixed date, digital content with immediate access, a service fully performed…). For the conditional reasons the plugin captures the customer’s express consent at checkout (WooCommerce classic + block, FluentCart, EDD), stores it as evidence, sends the required durable-medium confirmation, and only then hides the button. Physical products always keep the right — never hidden by mistake.
- Applicability by country — EU/EEA consumers only (default) or always; B2B (VAT) orders can be treated as out of scope.
Evidence, timestamps & integrity
- The immutable log is append-only and hash-chained (HMAC-keyed with your site secret), so tampering is detectable.
- Recommended trusted timestamping (off by default — one click to enable): free, independently-verifiable OpenTimestamps (Bitcoin) anchoring, or a qualified eIDAS RFC 3161 timestamp (a free Sectigo endpoint, or your national authority — Aruba, InfoCert, D-Trust, Universign, FNMT, SwissSign), for an independent “data certa” of when each withdrawal was received. The hash chain is the baseline evidence on its own; once you enable a provider, failed stamps retry automatically and any not-yet-anchored records are surfaced in the admin. (It is off by default only because WordPress.org requires external calls to be opt-in — the plugin prompts you to switch it on.)
Privacy & GDPR
- The log commits to an anonymised IP; the full IP lives separately and is erased after a configurable retention (10 years by default).
- A Consent records screen lists and exports the exemption consents (CSV). Two ready-to-paste privacy clauses are generated (withdrawal log + exemption-consent), on a legitimate-interest basis. The uninstaller keeps the evidence log by default (legal hold) unless you opt to erase it.
Documents & compliance
Read the full description on the official page →