{"id":11572,"date":"2026-06-29T16:06:43","date_gmt":"2026-06-29T08:06:43","guid":{"rendered":"https:\/\/aeosub.com\/wwu-withdrawal-button\/"},"modified":"2026-06-29T16:06:43","modified_gmt":"2026-06-29T08:06:43","slug":"wwu-withdrawal-button","status":"publish","type":"post","link":"https:\/\/aeosub.com\/zh\/wwu-withdrawal-button\/","title":{"rendered":"WWU Right of Withdrawal for Popular Ecommerce Platforms"},"content":{"rendered":"<div class=\"post-img\" style=\"margin-bottom: 25px\"><img decoding=\"async\" src=\"https:\/\/ps.w.org\/wwu-withdrawal-button\/assets\/banner-1544x500.png?rev=3589609\" alt=\"WWU Right of Withdrawal for Popular Ecommerce Platforms\" loading=\"lazy\" style=\"width: 100%;height: auto;border-radius: 12px\"><\/div>\n<div class=\"plugin-expert-review\" style=\"border: 1px solid #e2e8f0;border-left: 4px solid #4a3bca;border-radius: 10px;padding: 20px;margin-bottom: 25px;background: #fff;font-family: -apple-system, system-ui, sans-serif\">\n<div style=\"font-weight: bold;font-size: 1.1em;color: #4a3bca;margin-bottom: 10px\">LethaldiranMX Insight<\/div>\n<div style=\"color: #4a5568;font-size: 14px;line-height: 1.6\">\n<div>\n<p>This plugin addresses a critical regulatory deadline for EU-facing e-commerce operations by automating compliance with the upcoming June 2026 consumer withdrawal mandate under Directive (EU) 2023\/2673. By integrating a standardized, two-step withdrawal flow directly into WooCommerce, FluentCart, and Easy Digital Downloads, it eliminates the operational friction of manual contract cancellations. The implementation of a tamper-evident, hash-chained log and durable-medium receipts provides store owners with robust, legally defensible audit trails. For digital operations managers, this is a proactive compliance asset that seamlessly bridges the gap between legal requirements and technical execution.<\/p>\n<p><strong>Best Fit &amp; Operational Role:<\/strong> This plugin is a critical addition for any WordPress-based e-commerce store selling to consumers within the European Union, particularly those operating under strict jurisdictions like Italy&#8217;s Codice del Consumo. It acts as a specialized compliance layer in the WordPress stack, integrating directly with existing checkout and customer account structures to handle guest lookups, partial refunds, and multi-language routing. It is best suited for merchants seeking a set-and-forget solution to statutory consumer rights without having to custom-engineer secure logging mechanisms or PDF generation workflows.<\/p>\n<p><strong>Potential Limitations &amp; Pitfalls:<\/strong> Operational overhead may arise from managing the storage of generated PDF receipts and maintaining the integrity of the hash-chained logs during database migrations or staging-to-production syncs. Additionally, store owners must ensure their transactional email infrastructure is highly reliable, as the delivery of the durable-medium receipt is a key legal requirement. No other technical limitations or security risks were identified based on the available information.<\/p>\n<\/div>\n<\/div><\/div>\n<div class=\"plugin-info-card\" style=\"border: 1px solid #e2e8f0;border-radius: 10px;overflow: hidden;margin-bottom: 30px;font-family: -apple-system, system-ui, sans-serif;background: #fff\">\n<div style=\"padding: 20px;border-bottom: 1px solid #edf2f7;background: #fafafa;display: flex;align-items: flex-start\">\n                <img decoding=\"async\" src=\"https:\/\/ps.w.org\/wwu-withdrawal-button\/assets\/icon.svg?rev=3589609\" alt=\"WWU Right of Withdrawal for Popular Ecommerce Platforms icon\" loading=\"lazy\" style=\"width: 45px;height: 45px;border-radius: 8px;margin-right: 15px\"> <\/p>\n<div style=\"flex: 1;line-height: 1.2\">\n<div style=\"font-weight: bold;font-size: 1.1em;color: #1a202c\">Plugin Specification<\/div>\n<p>                    <small style=\"color: #718096\">WordPress.org Official Data<\/small>\n                <\/div>\n<\/p><\/div>\n<table style=\"width: 100%;border-collapse: collapse;font-size: 14px\">\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;width: 35%;color: #4a5568;background: #fcfcfc\">Developer<\/th>\n<td style=\"padding: 12px 20px;font-weight: 500\"><a href=\"https:\/\/profiles.wordpress.org\/mredodos\/\" target=\"_blank\" rel=\"noopener\">Edoardo G.<\/a><\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Version<\/th>\n<td style=\"padding: 12px 20px\">v1.3.2<\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Active Installs<\/th>\n<td style=\"padding: 12px 20px\">0 +<\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Requires \/ Tested<\/th>\n<td style=\"padding: 12px 20px\">5.8 \/ 7.0<\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Last Updated<\/th>\n<td style=\"padding: 12px 20px\">2026-06-29 8:05am GMT<\/td>\n<\/tr>\n<tr>\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Official Link<\/th>\n<td style=\"padding: 12px 20px\"><a href=\"https:\/\/wordpress.org\/plugins\/wwu-withdrawal-button\/\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"text-decoration: none;color: #4a3bca;font-weight: bold\">View Details -&gt;<\/a><\/td>\n<\/tr>\n<\/table><\/div>\n<div class=\"plugin-short-desc\" style=\"margin: 20px 0;padding: 12px 15px;background: #f9fafb;border-left: 4px solid #4a3bca;border-radius: 6px;font-style: italic;color: #4a5568\">EU statutory withdrawal button (Art. 11a) for WooCommerce, FluentCart &amp; EDD: two-step flow, durable-medium receipt, tamper-evident log.<\/div>\n<p>Product page &amp; documentation: https:\/\/webwakeup.it\/wwu-withdrawal-button\/<\/p>\n<p>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 <strong>withdrawal function<\/strong> that lets consumers withdraw from a distance contract as easily as they concluded it. WWU Withdrawal Button adds that function \u2014 and everything around it you need to run it and to prove you did it right \u2014 to WooCommerce, FluentCart and Easy Digital Downloads.<\/p>\n<h4>How it works (in plain terms)<\/h4>\n<ol>\n<li>An eligible customer opens their order and clicks the statutory <strong>&#8220;Withdraw from contract here&#8221;<\/strong> button \u2014 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).<\/li>\n<li>A simple <strong>two-step form<\/strong> appears: they review what they are withdrawing from (optionally ticking only some items \u2014 partial withdrawal is allowed), then confirm. No reason required, no hoops.<\/li>\n<li>The instant they confirm, the customer receives an <strong>acknowledgement of receipt on a durable medium<\/strong> \u2014 an e-mail, a PDF copy and a permanent verifiable link \u2014 showing exactly what was withdrawn and the precise date and time. The order is flagged &#8220;withdrawal requested&#8221;.<\/li>\n<li>Every step is written to a <strong>tamper-evident, append-only log<\/strong> (hash-chained and timestamped) so you can prove what happened and when. You then handle the refund as usual \u2014 the plugin records that too.<\/li>\n<\/ol>\n<p>That is the whole customer experience. Everything below exists to make it correct, easy to run, and defensible.<\/p>\n<h4>For your customers<\/h4>\n<ul>\n<li>A prominently displayed, legible button with the <strong>exact statutory wording per language<\/strong> (IT, EN, DE, FR, ES, SV \u2014 extensible).<\/li>\n<li>The button appears where customers actually look: the <strong>account area<\/strong> (order list, order detail, a dedicated &#8220;Right of withdrawal&#8221; tab), a <strong>link inside order e-mails<\/strong>, a <strong>public self-service page<\/strong> with guest lookup, and anywhere via <strong>shortcodes<\/strong> or the <strong>Gutenberg block<\/strong>.<\/li>\n<li>A short, reassuring <strong>step-by-step guide<\/strong> during the flow (timing, refund, returns); the wording and the withdrawal window (\u226514 days \u2014 you may grant more) are editable.<\/li>\n<li>When an order is genuinely exempt, a clear <strong>&#8220;why is the button not here&#8221; note<\/strong> explains the specific legal exception, instead of leaving the customer confused.<\/li>\n<li>A human-readable <strong>verification certificate<\/strong> for the receipt (integrity, order, date, hash) \u2014 not raw code.<\/li>\n<\/ul>\n<h4>For you (the merchant)<\/h4>\n<ul>\n<li>An onboarding <strong>Dashboard<\/strong> with a setup checklist (one-click fixes), a plain &#8220;how it works&#8221; walkthrough, and a &#8220;where the button appears \/ why it might not&#8221; explainer.<\/li>\n<li>A one-click <strong>e-mail delivery test<\/strong> that detects your SMTP plugin and proves the receipt actually reaches the inbox \u2014 the #1 cause of &#8220;nothing happened&#8221;.<\/li>\n<li>A <strong>Requests dashboard<\/strong> to manage every withdrawal: status (open \/ processed \/ refunded), a chain-integrity badge, and one-click <strong>mark processed<\/strong>, <strong>resend receipt<\/strong> and <strong>open the order to refund<\/strong> (the refund is logged as proof you met the 14 days). Subscription and partial-withdrawal requests are flagged.<\/li>\n<li>A <strong>Compliance page<\/strong>: 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.<\/li>\n<li>Receipts are <strong>real WooCommerce e-mails<\/strong> (your logo, colours, header) with a preview. The withdrawal button and form <strong>inherit your theme&#8217;s typography and colour presets<\/strong> out of the box, so they blend in automatically; for finer control, restyle every part from <strong>Appearance <span aria-hidden=\"true\" class=\"wp-exclude-emoji\">\u2192<\/span> Customize <span aria-hidden=\"true\" class=\"wp-exclude-emoji\">\u2192<\/span> Additional CSS<\/strong> (built into WordPress), targeting the plugin&#8217;s documented CSS variables and classes.<\/li>\n<\/ul>\n<h4>Smart legal handling (so you don&#8217;t have to think about it)<\/h4>\n<ul>\n<li><strong>Subscriptions<\/strong> \u2014 the law gives one 14-day right per contract, so the button shows on the <strong>initial order only<\/strong> and is hidden on renewals (WooCommerce Subscriptions, FluentCart, EDD Recurring). Fail-safe, with opt-in overrides.<\/li>\n<li><strong>Partial withdrawal<\/strong> \u2014 customers can withdraw from only some items of an order.<\/li>\n<li><strong>Art. 59 exemptions<\/strong> \u2014 tag products or categories by the specific statutory reason (events on a fixed date, digital content with immediate access, a service fully performed\u2026). For the conditional reasons the plugin captures the customer&#8217;s <strong>express consent at checkout<\/strong> (WooCommerce classic + block, FluentCart, EDD), stores it as evidence, sends the required durable-medium confirmation, and only then hides the button. <strong>Physical products always keep the right<\/strong> \u2014 never hidden by mistake.<\/li>\n<li><strong>Applicability by country<\/strong> \u2014 EU\/EEA consumers only (default) or always; B2B (VAT) orders can be treated as out of scope.<\/li>\n<\/ul>\n<h4>Evidence, timestamps &amp; integrity<\/h4>\n<ul>\n<li>The immutable log is <strong>append-only and hash-chained<\/strong> (HMAC-keyed with your site secret), so tampering is detectable.<\/li>\n<li><strong>Recommended<\/strong> trusted timestamping (off by default \u2014 one click to enable): free, independently-verifiable <strong>OpenTimestamps<\/strong> (Bitcoin) anchoring, or a <strong>qualified eIDAS RFC 3161<\/strong> timestamp (a free Sectigo endpoint, or your national authority \u2014 Aruba, InfoCert, D-Trust, Universign, FNMT, SwissSign), for an independent <strong>&#8220;data certa&#8221;<\/strong> 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 \u2014 the plugin prompts you to switch it on.)<\/li>\n<\/ul>\n<h4>Privacy &amp; GDPR<\/h4>\n<ul>\n<li>The log commits to an <strong>anonymised IP<\/strong>; the full IP lives separately and is <strong>erased after a configurable retention<\/strong> (10 years by default).<\/li>\n<li>A <strong>Consent records<\/strong> 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.<\/li>\n<\/ul>\n<h4>Documents &amp; compliance<\/h4>\n<ul>\n<li>Generates the <strong>Annex I-B model withdrawal form<\/strong> and ready clauses for <strong>pre-contractual information, Terms &amp; Conditions and Privacy<\/strong> \u2014 and reminds you, clearly, that installing the button is <strong>not enough<\/strong>: your Terms and pre-contractual withdrawal article must be updated to describe the new button modality (the plugin gives you the exact text to paste).<\/li>\n<li>A single <strong>consolidated &#8220;Right of withdrawal&#8221; notice<\/strong>, assembled live from your settings and the Art. 59 exceptions you selected, published three ways: the <strong><code>[webwakeupwdb_policy]<\/code> shortcode<\/strong>, an <strong>auto-created page<\/strong> (one click to recreate it if you delete it) or a downloadable <strong>PDF<\/strong> \u2014 all managed from <strong>Compliance <span aria-hidden=\"true\" class=\"wp-exclude-emoji\">\u2192<\/span> &#8220;Informativa sul diritto di recesso&#8221;<\/strong> (preview \/ create \/ open \/ <strong>freeze<\/strong> to static HTML \/ download). Optionally, two opt-in toggles append the same clauses to your <strong>Complianz<\/strong> Privacy Policy and Terms &amp; Conditions (EU-only, off by default, with a live preview). It complements \u2014 it does <strong>not<\/strong> replace \u2014 your own legal texts.<\/li>\n<\/ul>\n<h4>Integrations &amp; automation<\/h4>\n<ul>\n<li>A <strong>read-only REST API<\/strong> (authenticated with a standard Application Password) to list requests and check an order&#8217;s withdrawal status, plus an optional <strong>signed webhook<\/strong> (HMAC-SHA256) fired the moment a withdrawal is confirmed \u2014 for Zapier, Make, n8n, a CRM or a helpdesk. Privacy-first: the consumer&#8217;s IP is never exposed. <strong>33 documented hooks\/filters<\/strong> for developers.<\/li>\n<li>Plays nicely with <strong>Complianz<\/strong>, <strong>TranslatePress<\/strong> and page-cache plugins (WP Rocket \/ LiteSpeed \/ W3TC).<\/li>\n<\/ul>\n<h4>Platforms &amp; licence<\/h4>\n<ul>\n<li><strong>WooCommerce (HPOS + legacy), FluentCart and Easy Digital Downloads (3.0+)<\/strong> through a common adapter \u2014 one plugin for all three. On FluentCart it can step aside automatically if FluentCart ships its own native withdrawal add-on, so customers never see two buttons.<\/li>\n<li><strong>Free and open source<\/strong> (GPLv3) \u2014 no upsell, no tracking, no remote scripts or fonts loaded on your site. Passed a full multi-dimension security audit (0 critical \/ 0 high).<\/li>\n<\/ul>\n<p>This plugin is a technical aid to compliance and is <strong>not legal advice<\/strong>. Have your own counsel review your store&#8217;s documents.<\/p>\n<h3>External services<\/h3>\n<p>This plugin makes <strong>no external calls by default<\/strong>. Every outbound connection listed below is <strong>opt-in<\/strong> and stays <strong>off<\/strong> until you explicitly enable it in the settings. The tamper-evident log works fully offline \u2014 it is append-only and hash-chained with your site secret \u2014 so timestamping only <em>adds<\/em> an extra, independently-verifiable anchor; it is never required for the plugin to function.<\/p>\n<p><strong>OpenTimestamps<\/strong> (opt-in, off by default) \u2014 only if you set the timestamp provider to &#8220;OpenTimestamps&#8221; (Settings <span aria-hidden=\"true\" class=\"wp-exclude-emoji\">\u2192<\/span> Receipt &amp; evidence) does the plugin connect to the OpenTimestamps public calendar servers to obtain a free, trusted timestamp (a &#8220;data certa&#8221;) for the log.<\/p>\n<ul>\n<li><strong>What is sent:<\/strong> only a SHA-256 hash (a one-way digest) of the immutable-log record, plus a random privacy nonce. No personal data, order content, names, emails or IP addresses are ever sent \u2014 only an opaque hash that cannot be reversed.<\/li>\n<li><strong>When:<\/strong> only while the provider is enabled \u2014 once when a withdrawal is confirmed (to submit the hash) and periodically via WP-Cron (to retrieve the Bitcoin-anchored proof). Nothing is ever sent while the provider is &#8220;None&#8221; (the default).<\/li>\n<li><strong>Where:<\/strong> the OpenTimestamps public calendars (a.pool.opentimestamps.org, b.pool.opentimestamps.org, a.pool.eternitywall.com, ots.btc.catallaxy.com).<\/li>\n<li><strong>Service info \/ privacy:<\/strong> https:\/\/opentimestamps.org\/<\/li>\n<\/ul>\n<p><strong>RFC 3161 \/ eIDAS timestamp authority<\/strong> (opt-in, off by default) \u2014 if you instead set the provider to an RFC 3161 authority, the same one-way SHA-256 hash (no personal data) is sent to the authority URL <strong>you<\/strong> configure. This is a provider you choose and contract with directly (examples: a free Sectigo endpoint, or a national authority such as Aruba, InfoCert, D-Trust, Universign, FNMT, SwissSign); please review that provider&#8217;s own terms of service and privacy policy. No such call is made until you enable it.<\/p>\n<p><strong>Outbound webhook<\/strong> (opt-in, off by default \u2014 Settings <span aria-hidden=\"true\" class=\"wp-exclude-emoji\">\u2192<\/span> Integrations) \u2014 if enabled, the plugin sends a signed POST to the endpoint URL <strong>you<\/strong> specify whenever a withdrawal is confirmed. The payload carries a verification hash and contract reference, never the consumer&#8217;s IP address.<\/p>\n<p>No other external services are used. The plugin does not load remote scripts, fonts or trackers on your site.<\/p>\n<h3>Privacy<\/h3>\n<p>The plugin records withdrawal declarations (name, identified contract, email, IP address, date and time) in an append-only, tamper-evident log on <strong>your own server<\/strong>, because Art. 54-bis requires this as legal evidence (GDPR Art. 6(1)(c)\/(f)). It generates a ready-to-paste privacy clause for your policy. Data is retained for a configurable period (10 years by default), and the uninstaller keeps the evidence log by default (legal hold) unless you opt to erase it.<\/p>\n<p>For the conditional Art. 59 exemptions, the plugin also stores the consumer&#8217;s checkout consent + acknowledgement (the agreed wording, a hash, the date\/time and \u2014 unless you turn it off \u2014 the IP) as evidence to prove the exemption is valid. The lawful basis is <strong>legitimate interest<\/strong> (GDPR Art. 6(1)(f); defence of legal claims), <strong>not<\/strong> GDPR consent. The IP lives only on the order (never in the immutable log) and is automatically anonymised once the retention period lapses. A second ready-to-paste privacy clause is generated for this processing.<\/p>\n<div class=\"plugin-editorial-note\" style=\"margin-top: 25px;padding: 12px 15px;background: #f8fafc;border-radius: 6px;color: #64748b;font-size: 13px;line-height: 1.5\">Editorial note: This overview combines WordPress.org official plugin metadata with an AI-assisted LethaldiranMX editorial review. Plugin data should be verified on the official WordPress.org listing before installation.<\/div>\n","protected":false},"excerpt":{"rendered":"<p>EU statutory withdrawal button (Art. 11a) for WooCommerce, FluentCart &amp; EDD: two-step flow, durable-medium receipt, tamper-evident log.<\/p>","protected":false},"author":1,"featured_media":11573,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[252],"tags":[1420,590,2821,1053,569,555],"class_list":["post-11572","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-trends","tag-fluentcart","tag-gdpr","tag-recesso","tag-right-of-withdrawal","tag-woocommerce","tag-wordpress-plugin"],"_links":{"self":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/posts\/11572","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/comments?post=11572"}],"version-history":[{"count":0,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/posts\/11572\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/media\/11573"}],"wp:attachment":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/media?parent=11572"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/categories?post=11572"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/tags?post=11572"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}