{"id":349555,"date":"2026-08-16T06:10:48","date_gmt":"2026-08-16T06:10:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/octoplug-withdrawal-button\/"},"modified":"2026-08-16T06:43:16","modified_gmt":"2026-08-16T06:43:16","slug":"octoplug-withdrawal-button","status":"publish","type":"plugin","link":"https:\/\/mk.wordpress.org\/plugins\/octoplug-withdrawal-button\/","author":23530674,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.3","stable_tag":"1.3.3","tested":"7.0.4","requires":"6.5","requires_php":"8.0","requires_plugins":null,"header_name":"EU Withdrawal Button for WooCommerce - Octoplug","header_author":"Octoplug","header_description":"Adds the EU-required withdrawal button to your WooCommerce store (Directive (EU) 2023\/2673): two-step flow, durable receipt with timestamp, guest-friendly page, request queue. Compliance tool, not legal advice.","assets_banners_color":"2a3a54","last_updated":"2026-08-16 06:43:16","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/octoplug.net\/withdrawal-button","header_author_uri":"https:\/\/octoplug.net","rating":0,"author_block_rating":0,"active_installs":0,"downloads":34,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.3.2":{"tag":"1.3.2","author":"octoplug","date":"2026-08-16 06:10:24"},"1.3.3":{"tag":"1.3.3","author":"octoplug","date":"2026-08-16 06:43:16"}},"upgrade_notice":{"1.3.2":"<p>Security hardening (output escaping and settings-hook sanitization). The dedicated-page shortcode is now [opwb_withdrawal]; update it only if you placed it by hand. Nothing else changes.<\/p>","1.3.1":"<p>Housekeeping only: nothing changes in the withdrawal flow. Interface translations now arrive as WordPress language packs instead of being bundled with the plugin.<\/p>","1.3.0":"<p>Recommended. Requires PHP 8.0 or newer. Customers past the deadline no longer meet a silent page, the focus ring on &quot;Confirm withdrawal&quot; is visible again, and Settings saves with one button. If your store refuses late requests, add the new contact email.<\/p>","1.2.1":"<p>Recommended: withdrawal outcome emails now reach the customer in their own language even if that language is not installed in WordPress.<\/p>","1.2.0":"<p>Adds the extension points used by the Pro add-on. Fully backward compatible: nothing changes if you do not use the add-on.<\/p>","1.1.0":"<p>Clearer dashboard (setup progress and next action) and a full in-app manual. No change to the withdrawal flow or to your data.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3649312,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.gif":{"filename":"icon-256x256.gif","revision":3649312,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3649312,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3649312,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"octoplug\/withdrawal":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"octoplug\/withdrawal","title":"Octoplug: Withdrawal","category":"woocommerce","icon":"shield","description":"Renders the EU withdrawal flow: eligible orders for logged-in customers, order lookup for guests.","keywords":["withdrawal","right of withdrawal","eu","woocommerce"],"textdomain":"octoplug-withdrawal-button","supports":{"html":false,"multiple":false},"editorScript":"file:.\/editor.js"}},"tagged_versions":["1.3.2","1.3.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3649328,"resolution":"1","location":"assets","locale":"","width":1280,"height":969},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3649328,"resolution":"2","location":"assets","locale":"","width":1280,"height":1530},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3649328,"resolution":"3","location":"assets","locale":"","width":1280,"height":1134},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3649328,"resolution":"4","location":"assets","locale":"","width":1280,"height":1180},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3649328,"resolution":"5","location":"assets","locale":"","width":1280,"height":1063},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3649328,"resolution":"6","location":"assets","locale":"","width":1280,"height":500}},"screenshots":{"1":"Setup wizard \u2014 final step with the compliance checklist.","2":"Requests dashboard: compliance card, counters and queue.","3":"Request detail with timeline and receipt controls.","4":"Settings \u2014 button &amp; placement.","5":"Customer flow: two-step withdrawal in the account area.","6":"Guest withdrawal page with order lookup."}},"plugin_section":[],"plugin_tags":[255182,395,263226,245590,286],"plugin_category":[45],"plugin_contributors":[275932],"plugin_business_model":[],"class_list":["post-349555","plugin","type-plugin","status-publish","hentry","plugin_tags-consumer-rights","plugin_tags-eu","plugin_tags-right-of-withdrawal","plugin_tags-withdrawal","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-octoplug","plugin_committers-octoplug"],"banners":{"banner":"https:\/\/ps.w.org\/octoplug-withdrawal-button\/assets\/banner-772x250.png?rev=3649312","banner_2x":"https:\/\/ps.w.org\/octoplug-withdrawal-button\/assets\/banner-1544x500.png?rev=3649312","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/octoplug-withdrawal-button\/assets\/icon-128x128.png?rev=3649312","icon_2x":"https:\/\/ps.w.org\/octoplug-withdrawal-button\/assets\/icon-256x256.gif?rev=3649312","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/octoplug-withdrawal-button\/assets\/screenshot-1.png?rev=3649328","caption":"Setup wizard \u2014 final step with the compliance checklist."},{"src":"https:\/\/ps.w.org\/octoplug-withdrawal-button\/assets\/screenshot-2.png?rev=3649328","caption":"Requests dashboard: compliance card, counters and queue."},{"src":"https:\/\/ps.w.org\/octoplug-withdrawal-button\/assets\/screenshot-3.png?rev=3649328","caption":"Request detail with timeline and receipt controls."},{"src":"https:\/\/ps.w.org\/octoplug-withdrawal-button\/assets\/screenshot-4.png?rev=3649328","caption":"Settings \u2014 button &amp; placement."},{"src":"https:\/\/ps.w.org\/octoplug-withdrawal-button\/assets\/screenshot-5.png?rev=3649328","caption":"Customer flow: two-step withdrawal in the account area."},{"src":"https:\/\/ps.w.org\/octoplug-withdrawal-button\/assets\/screenshot-6.png?rev=3649328","caption":"Guest withdrawal page with order lookup."}],"raw_content":"<!--section=description-->\n<p>Directive (EU) 2023\/2673 requires online stores selling to EU consumers to offer a clearly visible <strong>withdrawal function<\/strong> \u2014 a \"withdrawal button\" \u2014 so customers can withdraw from a contract as easily as they entered it. Octoplug adds that function to WooCommerce, end to end.<\/p>\n\n<p>Also known across the EU as: <strong>pulsante di recesso \/ recesso digitale (art. 54-bis Codice del Consumo)<\/strong> in Italy, <strong>Widerrufsbutton \/ Widerrufsfunktion<\/strong> in Germany and Austria, <strong>bouton de r\u00e9tractation<\/strong> in France, <strong>bot\u00f3n de desistimiento<\/strong> in Spain, <strong>przycisk odst\u0105pienia od umowy<\/strong> in Poland. Whatever your market calls it, this plugin implements it.<\/p>\n\n<p><strong>What it does<\/strong><\/p>\n\n<ul>\n<li>Adds a <strong>\"Withdraw from contract here\"<\/strong> button (or link) to the customer's account area: on the order page and, optionally, as an action in the order list.<\/li>\n<li>Optional <strong>footer link<\/strong> on every page and a <strong>dedicated withdrawal page<\/strong> you can place anywhere with the <code>octoplug\/withdrawal<\/code> block or the <code>[opwb_withdrawal]<\/code> shortcode \u2014 the page is created for you.<\/li>\n<li><strong>Two-step flow<\/strong>: the customer reviews the order, can select specific items and add an optional note (no reason required), then confirms. Works without JavaScript.<\/li>\n<li><strong>Durable receipt<\/strong>: after confirming, the customer receives a confirmation email with the exact date and time of the withdrawal (site timezone plus UTC) and a SHA-256 integrity fingerprint \u2014 the proof the Directive requires. Delivery failures are logged and surfaced, never silent.<\/li>\n<li><strong>Guest-friendly<\/strong>: customers without an account can find their order with the order number and billing email. The lookup is POST-only, rate-limited, honeypot-protected and always answers generically \u2014 no personal data leaks.<\/li>\n<li><strong>Request queue<\/strong> under WooCommerce: statuses (New, In progress, Completed, Rejected, Cancelled by customer), filters, bulk actions, request detail with timeline, CSV export (injection-safe). A rejection always requires a note, which is sent to the customer.<\/li>\n<li><strong>Lifecycle emails<\/strong> to the customer (completed, rejected, cancelled) and notifications to the store, in the language of the order (WPML and Polylang aware).<\/li>\n<li><strong>Withdrawal window<\/strong> handling: 14 days minimum (configurable upwards), anchored to delivery\/completion or order date, end-of-day deadlines, grace buffer. You decide what happens afterwards, with three modes:\n\n<ul>\n<li><em>Refuse late requests<\/em> (the default): past the deadline nothing can be submitted online. The customer is not left in front of a page that lost its button \u2014 a notice states when the period ended and invites them to write to your contact address.<\/li>\n<li><em>Hide the button but accept late requests<\/em>: the button disappears, as you asked, and the notice says when the period ended \u2014 followed by a discreet link for the customer who wants to send the request anyway. It is registered with its date and flagged \"out of window\" for your review, which is exactly what the setting promises.<\/li>\n<li><em>Keep it visible and accept late requests<\/em>: the button stays, above a banner saying the deadline appears to have passed and that the store will review the request.\nIn no mode does the plugin tell a customer that the right of withdrawal is gone: when the consumer was not informed of that right the period extends to twelve months, and only you can judge the case. Requests accepted after the deadline are registered inside a configurable cut-off and flagged \"out of window\" for your review.<\/li>\n<\/ul><\/li>\n<li><strong>Late attempts counter<\/strong> on the dashboard: how many orders reached the withdrawal function after the deadline in the last 30 days, counted once a day each. They are not requests and nothing lands in your queue \u2014 it is an early warning that deliveries or your pre-contractual information may need a look. The counter is a plain daily total: it stores no order number, no name and no IP address.<\/li>\n<li>Optional WooCommerce <strong>order statuses<\/strong> \"Withdrawal requested\" \/ \"Withdrawal completed\" with automatic revert.<\/li>\n<li><strong>Simple exclusions<\/strong>: flag single products, whole categories or product types (virtual\/downloadable) as exempt; flagged requests are marked for your review \u2014 never auto-rejected. Optional exemption note on the product page.<\/li>\n<li><strong>Legal wording packs<\/strong> in English, Italian, German, French, Spanish and Polish: button label, confirmation texts, receipt template, suggested Terms &amp; Conditions snippet \u2014 all editable.<\/li>\n<li><strong>Setup wizard (5 minutes)<\/strong> and a <strong>compliance checklist<\/strong> that shows exactly what still needs attention.<\/li>\n<li><strong>GDPR tools<\/strong>: integration with the WordPress personal data exporter\/eraser (requests are anonymized, not destroyed \u2014 they are legal evidence) and an optional retention policy.<\/li>\n<\/ul>\n\n<p><strong>What it does NOT do<\/strong><\/p>\n\n<ul>\n<li>It does not rewrite your Terms &amp; Conditions (it suggests a snippet you can copy).<\/li>\n<li>It does not process refunds automatically \u2014 you stay in control in WooCommerce.<\/li>\n<li>It is a <strong>compliance tool, not legal advice<\/strong>. For specific legal questions, consult a qualified professional.<\/li>\n<\/ul>\n\n<p><strong>Privacy &amp; transparency<\/strong><\/p>\n\n<ul>\n<li><strong>No external calls, no tracking, no accounts<\/strong>: everything runs on your site and your data never leaves it.<\/li>\n<li>Data stored per request: customer name and billing email, optional note, IP address (full, truncated or omitted \u2014 your choice), timestamps (GMT), order reference, receipt fingerprint. Stored in a dedicated table on your database.<\/li>\n<li>Uninstall is <strong>conservative by default<\/strong>: your withdrawal records are kept unless you explicitly enable \"Delete all data on uninstall\".<\/li>\n<\/ul>\n\n<p><strong>Multisite<\/strong>: network activation installs on existing sites; sites created afterwards need the plugin activated individually (planned for a future release). Uninstall cleans the current site only.<\/p>\n\n<p><strong>Translations<\/strong><\/p>\n\n<ul>\n<li>The <strong>customer-facing legal wording<\/strong> (button label, confirmation page, receipt email, T&amp;C snippet) ships in English, Italian, German, French, Spanish and Polish and always follows the language of the order \u2014 independent of the interface translation.<\/li>\n<li>The <strong>plugin interface<\/strong> is fully internationalized and translated through translate.wordpress.org, so WordPress installs and updates the language packs on its own. Italian, German, French and Spanish are contributed there by the author; any other language is open to the community.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin through Plugins \u2192 Add New, or unzip it into <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate it. PHP 8.0+ and an active WooCommerce 7.0+ are required.<\/li>\n<li>Follow the 5-minute setup wizard: store country and languages, button placement, receipt email, compliance checklist.<\/li>\n<li>Done \u2014 the button appears in the customer account area, and the withdrawal page and footer link are in place.<\/li>\n<\/ol>\n\n<p>You can re-run the wizard at any time, or configure everything manually under WooCommerce \u2192 Withdrawal Button.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20this%20legal%20advice%3F\"><h3>Is this legal advice?<\/h3><\/dt>\n<dd><p>No. Octoplug is a compliance tool: it implements the withdrawal function required by Directive (EU) 2023\/2673, but it is not legal advice. For specific questions about your obligations, consult a qualified professional.<\/p><\/dd>\n<dt id=\"the%20withdrawal%20button%20is%20not%20visible%20on%20an%20order.%20why%3F\"><h3>The withdrawal button is not visible on an order. Why?<\/h3><\/dt>\n<dd><p>Check that the master switch is on, that the order status is one of the eligible statuses (processing, completed, on hold) and that the order is still within the withdrawal window (plus the visibility buffer). Orders that are fully refunded, cancelled or failed do not show the button.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20the%20withdrawal%20period%20has%20expired%3F\"><h3>What happens when the withdrawal period has expired?<\/h3><\/dt>\n<dd><p>By default the plugin refuses late requests online: the button is replaced by a notice that says when the period ended and invites the customer to contact you at the address you configure (Settings \u2192 Withdrawal window \u2192 \"Contact email for late requests\"). If you choose to hide the button but still accept late requests, the same notice is followed by a discreet link that lets the customer send the request anyway: it arrives flagged \"out of window\" for you to decide. If you keep the button visible, it stays and the request is registered and flagged \"out of window\". In all three cases the customer gets an explanation, and in none of them does the notice state that the right of withdrawal no longer exists \u2014 that is a judgement only you can make, and the statutory period extends to twelve months when the consumer was not informed of the right.<\/p><\/dd>\n<dt id=\"a%20guest%20customer%20cannot%20find%20their%20order.\"><h3>A guest customer cannot find their order.<\/h3><\/dt>\n<dd><p>The lookup matches the order number together with the <strong>billing<\/strong> email used at checkout \u2014 a different email will not match, on purpose. Sequential order number plugins are supported.<\/p><\/dd>\n<dt id=\"emails%20are%20not%20arriving.\"><h3>Emails are not arriving.<\/h3><\/dt>\n<dd><p>The plugin sends through <code>wp_mail()<\/code> like WooCommerce does. If WooCommerce emails also fail, configure an SMTP plugin. Failed receipt deliveries are flagged in the dashboard so you can resend them from the request page.<\/p><\/dd>\n<dt id=\"does%20uninstalling%20delete%20my%20withdrawal%20records%3F\"><h3>Does uninstalling delete my withdrawal records?<\/h3><\/dt>\n<dd><p>No. By default everything is kept, because the records are your legal evidence. Data is removed only if an administrator enables \"Delete all data on uninstall\" before deleting the plugin.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20translated%3F\"><h3>Is the plugin translated?<\/h3><\/dt>\n<dd><p>The legal wording the customer sees (button label, confirmation, receipt) ships localized in EN\/IT\/DE\/FR\/ES\/PL and follows the language of the order. The admin interface is translated into Italian (complete, manual included), German, French and Spanish; in the last three, a few admin texts added in the most recent release still fall back to English.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20personal%20data%20%28gdpr%29%3F\"><h3>What happens to personal data (GDPR)?<\/h3><\/dt>\n<dd><p>The plugin integrates with the WordPress privacy tools: exports include the customer's withdrawal requests, and erasure requests anonymize them (name, email, note, IP are cleared) while the reference, timestamps and receipt fingerprint are retained as the store's legal evidence. An optional retention policy anonymizes old requests automatically. No data ever leaves your site.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.3<\/h4>\n\n<ul>\n<li>Display name only: the plugin is now listed as \"EU Withdrawal Button for WooCommerce - Octoplug\", which says what it does. Nothing else changed \u2014 same plugin, same folder, same settings, same data. The directory URL and the text domain stay <code>octoplug-withdrawal-button<\/code>.<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>Hardening: every admin and front-end output is now escaped at the point it is echoed, and the settings-save hook passes sanitized data to add-ons instead of the raw request. No change to behaviour, receipts or stored data.<\/li>\n<li>The dedicated-page shortcode is now <code>[opwb_withdrawal]<\/code> (was <code>[octoplug_withdrawal]<\/code>). The <code>octoplug\/withdrawal<\/code> block and the auto-created page are unchanged; update the tag only if you placed the shortcode by hand.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>The two remaining inline scripts (the outcome focus on the front end, the setup wizard enhancements) now go out through <code>wp_add_inline_script()<\/code> on their own registered handle.<\/li>\n<li>Translations are no longer bundled: the interface language packs come from translate.wordpress.org, so <code>load_plugin_textdomain()<\/code> is gone as well (WordPress loads the domain just in time). The customer-facing legal wording is unaffected \u2014 it is plugin data, not a translation file, and still ships in six languages.<\/li>\n<li>No change to the withdrawal flow, the receipts or the stored data.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Minimum PHP raised to 8.0. We test and lint on PHP 8.0 to 8.4: 7.4 was declared without ever being tested on it, and it has had no security updates since the end of 2022 \u2014 not a place to keep a plugin that handles consumer data. WordPress 6.5 remains the minimum.<\/li>\n<li>\"Hide the button, accept late requests\" now does both halves of what its name says. The button stays hidden \u2014 that is the point of the setting \u2014 but the notice is followed by a discreet link, and the request sent through it is registered and flagged \"out of window\". Before, that mode behaved exactly like \"refuse\": the customer read that late requests were accepted and had no way to send one.<\/li>\n<li>Out-of-window orders are no longer silent, in either of the modes that take the button away. Where late requests are refused, the customer reads when the withdrawal period ended and where to write; where the button is hidden but late requests are still accepted, the customer reads that the period ended and that the store can still consider a late request. Both appear in all three entry points (account order page, dedicated page\/shortcode, guest lookup). The wording never denies the right of withdrawal: the period extends to twelve months when the consumer was not informed of it, and that call belongs to the shop owner.<\/li>\n<li>New setting \"Contact email for late requests\", required when late requests are refused: validated on save and checked by the compliance checklist. No fallback address is ever invented. When the button is only hidden, the address stays optional and is shown only if you set one.<\/li>\n<li>New dashboard counter \"Late attempts (30 days)\": orders that arrived after the deadline, counted once a day each. They are a number, not a queue \u2014 nothing to process. The counter stores a daily total only: no order number, no name, no IP address, nothing to export or erase.<\/li>\n<li>Accessibility fix (WCAG 2.4.7): the focus ring on \"Confirm withdrawal\" was drawn in white on a white background, i.e. invisible to keyboard users on the final, irreversible action. Every focusable element of the customer flow now has a double ring that holds on any theme.<\/li>\n<li>The Terms &amp; Conditions step is now actionable everywhere it appears (dashboard card, step board, compliance screen, wizard): \"Open the suggested text\" really shows the paragraph in a selectable field, the copy result is announced, and a second button leads straight to the WooCommerce setting that holds the Terms page.<\/li>\n<li>The Terms &amp; Conditions step can no longer be green while WooCommerce has no Terms page at all: the self-declared step regresses and says why.<\/li>\n<li>One single form and one single save button on the Settings screen: add-on settings are saved by the same click, so no half of the screen can be thrown away silently any more.<\/li>\n<li>The setup wizard now asks for the two settings with legal consequences it used to skip while grading them: how long the period lasts and whether it starts from the order or from the delivery.<\/li>\n<li>The requests queue tells \"no results for these filters\" (with a reset link) apart from \"no requests at all\" \u2014 it used to congratulate stores that had five open requests.<\/li>\n<li>The withdrawal reference (WD-\u2026) is now shown to the customer on the order page, not only in the receipt email.<\/li>\n<li>Rejecting a request without a note no longer loses the choice: the status comes back selected, the note is marked required and the page lands on the form.<\/li>\n<li>Guest lookup: after a failed attempt the order number is kept, the focus moves to the field to correct and the error is announced assertively. The billing email is still never carried in a URL.<\/li>\n<li>Orders left in a withdrawal order status without a request now show their real situation instead of nothing.<\/li>\n<li>Smaller fixes: the checklist title follows the configured number of days, the sentence \"counted from the delivery date\" is one translatable sentence instead of glued fragments, the retention \"years\" field is hidden when all records are kept, the screens table in the manual is generated from the real tab list (it listed four out of eight).<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Fixed: the withdrawal outcome emails (request completed, more information needed, request cancelled) now reach the customer in the language of their order, also on shops that do not have that language installed in WordPress itself. Before, they went out in the shop language. The withdrawal receipt was never affected.<\/li>\n<li>Translations are now loaded from wp-content\/languages\/plugins first, so a translation you install or override there wins over the bundled one.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Added: extension points that let the EU Withdrawal Button PRO add-on plug in cleanly \u2014 request-detail actions and audit timeline hooks, the receipt body passed to <code>opwb_receipt_sent<\/code>, an <code>opwb_exclusion_note<\/code> filter for per-clause product notes, an <code>opwb_order_email_link_html<\/code> filter for the order-email button, and an <code>opwb_bulk_actions<\/code> filter on the requests queue.<\/li>\n<li>The public contract version (<code>OPWB_CORE_API<\/code>) moves to 1.1. Fully backward compatible: with the Pro add-on inactive the plugin behaves exactly as before.<\/li>\n<li>No change to the withdrawal flow, the receipts or the stored data.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Dashboard redesigned around a setup progress card: completion ring, level, and the single next action to take \u2014 so it is always clear what is left before the store is compliant.<\/li>\n<li>New step board: open steps first (numbered, each with its fix action), completed ones folded away. A one-time confirmation is shown when the setup first reaches 100%.<\/li>\n<li>Documentation rebuilt as a real product manual: sticky section index, numbered steps, callouts, tables and code examples; new sections on the withdrawal window and on the developer hooks.<\/li>\n<li>Per-tab admin assets: the dashboard and documentation stylesheets load only on their own tab.<\/li>\n<li>No change to the withdrawal flow, the receipts or the stored data.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"The EU-required withdrawal button for WooCommerce: two-step flow, timestamped receipt, guest-friendly, request queue. Directive (EU) 2023\/2673.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/349555","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=349555"}],"author":[{"embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/octoplug"}],"wp:attachment":[{"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=349555"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=349555"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=349555"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=349555"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=349555"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=349555"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}