[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fuI_vwGH6YMWlpAJtah5yTjo1CE_A_uPpL9XVSk0vRSU":3,"$fJFAme8yJ1cC9MhvfB9_pEP-G1FFCHV1y2_eQTm3ej9o":127,"$flVYBTXi0dkzzO3Gd1W9zxbg3tVRLiMop8d7jYWePvKQ":132},{"slug":4,"name":5,"version":6,"author":7,"author_profile":8,"description":9,"short_description":10,"active_installs":11,"downloaded":12,"rating":13,"num_ratings":14,"last_updated":15,"tested_up_to":16,"requires_at_least":17,"requires_php":18,"tags":19,"homepage":25,"download_link":26,"security_score":13,"vuln_count":27,"unpatched_count":27,"last_vuln_date":28,"fetched_at":29,"discovery_status":30,"vulnerabilities":31,"developer":32,"crawl_stats":28,"alternatives":40,"analysis":28,"fingerprints":28},"apg-withdrawal-for-woocommerce","APG Withdrawal for WooCommerce","0.6.1","Art Project Group","https:\u002F\u002Fprofiles.wordpress.org\u002Fartprojectgroup\u002F","\u003Cp>\u003Cstrong>APG Withdrawal for WooCommerce\u003C\u002Fstrong> adds to your WooCommerce store a complete online right of withdrawal workflow compliant with EU consumer protection legislation.\u003C\u002Fp>\n\u003Ch4>Features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Customer withdrawal form via the \u003Ccode>[apg_withdrawal_form]\u003C\u002Fcode> shortcode.\u003C\u002Fli>\n\u003Cli>Configurable withdrawal window (days) and deadline source (completed or created date).\u003C\u002Fli>\n\u003Cli>Optional extra grace days on top of the standard withdrawal window.\u003C\u002Fli>\n\u003Cli>Active request detection: hides the withdrawal button if a request is already open for the order.\u003C\u002Fli>\n\u003Cli>Optional digital-content waiver checkbox at checkout (both classic shortcode and block-based checkout): a configurable selector chooses when to display it — never, only on virtual products (or per-product \u003Ccode>_apg_withdrawal_type = digital\u003C\u002Fcode>), on every order, or on selected categories and\u002For selected products. The customer’s choice is persisted to order meta as legal evidence.\u003C\u002Fli>\n\u003Cli>Admin request log with full request details (custom post type).\u003C\u002Fli>\n\u003Cli>IP address and browser identifier storage options for legal evidence.\u003C\u002Fli>\n\u003Cli>Email notification to the store admin on every new request.\u003C\u002Fli>\n\u003Cli>Automatic customer acknowledgement email on submission.\u003C\u002Fli>\n\u003Cli>Customer status update emails when the request is accepted, rejected or completed.\u003C\u002Fli>\n\u003Cli>Automation: updates the withdrawal request status automatically when the linked WooCommerce order changes status.\u003C\u002Fli>\n\u003Cli>My Account integration: customers can view their withdrawal request history.\u003C\u002Fli>\n\u003Cli>CSV export of all withdrawal requests.\u003C\u002Fli>\n\u003Cli>100% compatible with HPOS (High-Performance Order Storage).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Translations\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>English: by \u003Ca href=\"https:\u002F\u002Fartprojectgroup.es\u002F\" rel=\"nofollow ugc\">Art Project Group\u003C\u002Fa> (default language).\u003C\u002Fli>\n\u003Cli>Spanish: by \u003Ca href=\"https:\u002F\u002Fartprojectgroup.es\u002F\" rel=\"nofollow ugc\">Art Project Group\u003C\u002Fa>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>More information\u003C\u002Fh4>\n\u003Cp>You can learn more about \u003Cstrong>APG Withdrawal for WooCommerce\u003C\u002Fstrong> on our \u003Ca href=\"https:\u002F\u002Fartprojectgroup.es\u002Fplugins-para-woocommerce\u002Fapg-withdrawal-for-woocommerce\" rel=\"nofollow ugc\">official website\u003C\u002Fa>, and follow the development on \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fartprojectgroup\u002Fapg-withdrawal-for-woocommerce\" rel=\"nofollow ugc\">GitHub\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3>Thanks\u003C\u002Fh3>\n\u003Cp>Thanks to everyone who uses the plugin, helps improve it, makes a donation or encourages us with their comments.\u003C\u002Fp>\n\u003Cp>If you find this plugin useful, you can support its development with a \u003Ca href=\"https:\u002F\u002Fartprojectgroup.es\u002Ftienda\u002Fdonacion\" rel=\"nofollow ugc\">small donation\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3>External Services\u003C\u002Fh3>\n\u003Cp>This plugin connects to the WordPress.org Plugins API to fetch information about the plugin (such as the rating). It sends the plugin slug when requesting data. More information: https:\u002F\u002Fwordpress.org\u002Fabout\u002Fprivacy\u002F\u003C\u002Fp>\n","Add to WooCommerce an online withdrawal workflow with customer form, My Account integration and admin request log.",40,545,100,1,"2026-06-25T08:13:00.000Z","7.1","6.0","7.4",[20,21,22,23,24],"consumer-rights","refund","right-of-withdrawal","withdrawal","woocommerce","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fapg-withdrawal-for-woocommerce\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fapg-withdrawal-for-woocommerce.0.6.1.zip",0,null,"2026-07-22T17:31:50.256Z","no_bundle",[],{"slug":33,"display_name":7,"profile_url":8,"plugin_count":34,"total_installs":35,"avg_security_score":36,"avg_patch_time_days":37,"trust_score":38,"computed_at":39},"artprojectgroup",10,19220,96,258,76,"2026-08-28T19:51:58.803Z",[41,59,76,93,111],{"slug":42,"name":43,"version":44,"author":45,"author_profile":46,"description":47,"short_description":48,"active_installs":49,"downloaded":50,"rating":13,"num_ratings":51,"last_updated":52,"tested_up_to":53,"requires_at_least":17,"requires_php":18,"tags":54,"homepage":57,"download_link":58,"security_score":13,"vuln_count":27,"unpatched_count":27,"last_vuln_date":28,"fetched_at":29},"eu-withdrawal-compliance","EU Withdrawal Compliance","2.1.0","Fernando Tellado","https:\u002F\u002Fprofiles.wordpress.org\u002Ffernandot\u002F","\u003Cp>From \u003Cstrong>June 19, 2026\u003C\u002Fstrong>, EU Directive 2023\u002F2673 obliges every online retailer in the European Union to offer a digital withdrawal function that is at least as easy to use as the purchase flow itself. Most plugins in the directory stop at “a button”. This one ships the \u003Cstrong>complete toolkit\u003C\u002Fstrong> every EU store needs to comply — and a few things competitors don’t offer at any price.\u003C\u002Fp>\n\u003Cp>The plugin helps you implement the right of withdrawal requirements of Directive 2011\u002F83\u002FEU on consumer rights, as amended by Directive (EU) 2019\u002F2161 (the Omnibus Directive).\u003C\u002Fp>\n\u003Ch4>Only this plugin in the directory ships, all of it, for free\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>Two-step confirmation function (Art. 11a(3))\u003C\u002Fstrong> — the EU-wide baseline of the online withdrawal right. The public form leads to a review screen with a read-only summary and a dedicated “Confirm withdrawal” button; the request is registered only when that button is pressed, preventing the unintended exercise of the right. Held server-side between the two steps in a single-use token, so it works even without JavaScript.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Complete durable-medium acknowledgement of receipt (Art. 11a(4))\u003C\u002Fstrong>: the confirmation email reproduces the full content of the declaration (name, order, order date, scope, affected products) and the exact date and time of submission, carrying a \u003Cstrong>verifiable SHA-256 receipt hash\u003C\u002Fstrong> as tamper-evident proof — recomputable from the stored fields if a dispute arises.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Annex I.B model withdrawal form\u003C\u002Fstrong> (Directive 2011\u002F83\u002FEU) generated dynamically from your shop data, rendered as a collapsible block below the public form, with a printable view on the same URL. Meets the pre-contractual information obligation of Art. 6(1)(h).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Double-consent checkboxes at the WooCommerce checkout\u003C\u002Fstrong> for the two consents the directive expects to apply specific exceptions:\n\u003Cul>\n\u003Cli>Mandatory consent for digital content (Art. 16(m)) — blocks the place-order step until accepted.\u003C\u002Fli>\n\u003Cli>Optional consent for services started within the 14-day window (Art. 14(4)(a)) — enables pro-rated billing if the customer later withdraws.\u003Cbr \u002F>\nEvery consent is persisted on the order with the exact text shown, accepted\u002Fdeclined state, timestamp, IP and user agent — durable proof in case of dispute.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Single “Withdrawal status” dropdown per product and per category\u003C\u002Fstrong> with four explicit options (Standard, Digital content, Service started early, Other Article 16 exception). Drives both the Article 16 exclusion flag and the matching checkout consent in one place, with full subcategory inheritance.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Configurable public notice on excluded products\u003C\u002Fstrong>, rendered between price and add-to-cart, with separate title+body for digital content and other Article 16 exceptions.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Article 16 exclusions with category inheritance\u003C\u002Fstrong> — competing plugins gate this behind a paid Pro tier; here it’s free.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Native GDPR integration\u003C\u002Fstrong>: suggested Privacy Policy snippet + personal-data exporter + eraser, all keyed on the customer email — no second GDPR plugin to install.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Standalone mode\u003C\u002Fstrong>: the form, shortcode, request log, email notifications, SHA-256 receipt hash, Annex I.B model and GDPR integration all run \u003Cstrong>without WooCommerce\u003C\u002Fstrong>. The plugin always lives in its own top-level \u003Cstrong>Withdrawals\u003C\u002Fstrong> menu (with a \u003Cstrong>Settings\u003C\u002Fstrong> submenu), with or without WooCommerce — same path on every install.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Public-facing pieces\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Public withdrawal page automatically created on activation with a neutral, translation-ready template and the form embedded via shortcode (with a “review with a legal advisor” disclaimer).\u003C\u002Fli>\n\u003Cli>\u003Ccode>[ayudawp_withdrawal_form]\u003C\u002Fcode> shortcode for embedding the form anywhere on the site.\u003C\u002Fli>\n\u003Cli>\u003Ccode>[ayudawp_withdrawal_link]\u003C\u002Fcode> shortcode for a permanent link to the withdrawal page from any widget area, footer or template part — helps meet the “clearly identifiable” requirement of Article 11a of Directive 2023\u002F2673 without forcing a specific footer layout.\u003C\u002Fli>\n\u003Cli>\u003Ccode>[ayudawp_withdrawal_excluded_notice]\u003C\u002Fcode> shortcode to place the excluded-product notice with page builders (Divi, Elementor, Bricks, ShopLentor) that render their own product template and skip the standard WooCommerce hooks.\u003C\u002Fli>\n\u003Cli>HTML5-semantic form with HTML5 validation, honeypot anti-spam, escaped output, sanitized input and CSRF nonces.\u003C\u002Fli>\n\u003Cli>Privacy-policy acceptance checkbox before submit, linked to the WordPress-configured Privacy Policy page.\u003C\u002Fli>\n\u003Cli>Frontend and backend links generated by the plugin carry \u003Ccode>rel=\"noopener nofollow\"\u003C\u002Fcode> to keep the site’s link equity contained.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>WooCommerce-specific pieces (auto-activated when WooCommerce is detected)\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>My Account \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Right of withdrawal\u003C\u002Fstrong> endpoint with a per-order “Withdraw” button shown while the order is in an eligible status, deep-linked to the form with the order pre-filled.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Withdrawal notice injected into transactional emails\u003C\u002Fstrong> (processing, completed, customer invoice) with a direct link to the form pre-filled with the order number. Eligible order statuses configurable; admin emails never receive the notice.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Automatic verification of the order\u002Femail pair\u003C\u002Fstrong> when WooCommerce is active: the request is matched to a real order and gated by the configured eligible statuses. The 14-day deadline is surfaced as an advisory flag for the admin, not an automatic rejection (the period legally runs from delivery, which the shop verifies).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Optional “Accept unmatched requests” mode\u003C\u002Fstrong>: register requests that do not match any order as \u003Cem>Unverified\u003C\u002Fem> for manual review instead of rejecting them upfront, highlighted across the admin (notification email, list badge, detail warning and CSV column). Off by default.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Configurable advisory deadline\u003C\u002Fstrong>: choose order date vs. WooCommerce completion date as the basis, plus optional grace days, for the deadline flag surfaced to the admin — all from the settings UI, no code.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Order-number compatibility\u003C\u002Fstrong> with Sequential Order Numbers (free and Pro) and Custom Order Numbers for WooCommerce (both Tyche and WPFactory) out of the box, plus a filter to add any other numbering plugin or resolver.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>“Withdrawal” column\u003C\u002Fstrong> on the WooCommerce orders screen (legacy and HPOS) showing the status of any linked request, toggleable from Screen Options.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Private order notes\u003C\u002Fstrong> added at every lifecycle step (request received, accepted, rejected, completed) including any admin comment.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>HPOS-compatible\u003C\u002Fstrong> from day one, declared via \u003Ccode>FeaturesUtil::declare_compatibility()\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Admin tooling\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>Full request log\u003C\u002Fstrong> as a private custom post type with status lifecycle (pending \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> accepted \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> rejected \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> completed), customer details, scope (full \u002F partial), IP, user agent and UTC submission timestamp for legal traceability.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>CSV export of the request log\u003C\u002Fstrong> for accounting and consumer-protection audits: an “Export to CSV” bulk action on the listing plus a filtered export by status and date range under \u003Cstrong>Withdrawals \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Export withdrawals\u003C\u002Fstrong>. Columns include submission and resolution timestamps, scope, status, acknowledgement-delivery flag, receipt hash and excluded items, with cells escaped against CSV\u002Fformula injection.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Audit trail per request\u003C\u002Fstrong>: resolution timestamp recorded on every status change and a flag for whether the acknowledgement email was accepted for delivery (with its timestamp), both shown in the request detail and the CSV as burden-of-proof evidence.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Bulk actions\u003C\u002Fstrong> to mark several requests as accepted, rejected or completed at once, with email notification on transition.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Status metabox\u003C\u002Fstrong> with required comment when rejecting, optional comment when completing — comment forwarded to the customer email.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Acknowledgement email to the customer\u003C\u002Fstrong> on confirmation: the Art. 11a(4) durable-medium receipt with the full declaration content, the date and time of submission and the SHA-256 hash as proof, plus a follow-up email on every status transition.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Notification email to the shop admin\u003C\u002Fstrong> with reply-to set to the customer, sanitized against header injection.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Captured checkout consents\u003C\u002Fstrong> surfaced in the request detail metabox: exact text, accepted\u002Fdeclined state, timestamp, IP, user agent — durable proof on file.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Consistent admin menu\u003C\u002Fstrong>: always a top-level \u003Cstrong>Withdrawals\u003C\u002Fstrong> menu with a \u003Cstrong>Settings\u003C\u002Fstrong> submenu, regardless of whether WooCommerce is active. Same path on every install.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Legal disclaimer block\u003C\u002Fstrong> in the settings page making it explicit that the plugin provides optional technical tools and does not guarantee legal compliance.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Mandatory \u002F Recommended \u002F Optional tags\u003C\u002Fstrong> on every setting description so the merchant can scan the form quickly.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Built for production\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Conditional asset loading: CSS only loads on the withdrawal page, single-product pages that actually show the excluded notice, and plugin admin screens.\u003C\u002Fli>\n\u003Cli>Translation-ready, bundled es_ES translation, follows WordPress Coding Standards, fully escaped output and sanitized input, capability checks and nonces on every admin action.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>11 documented filters and 4 actions\u003C\u002Fstrong> for developers and agencies to extend the plugin without forking.\u003C\u002Fli>\n\u003Cli>PHP 7.4+, WordPress 6.0+, WooCommerce 7.0+ (optional).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Why this plugin?\u003C\u002Fh3>\n\u003Cp>The EU directive becomes enforceable in every member state on June 19, 2026, so the WordPress.org directory is filling up with “withdrawal button” plugins. This one stands out for verifiable reasons:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Fully free, no paid tier.\u003C\u002Fstrong> No premium add-on, no feature locked behind an upsell, no “Pro” version on the horizon. Everything documented on this page is what you get on install.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Two-step “confirm withdrawal” function built in\u003C\u002Fstrong>, the EU-wide baseline of Article 11a(3): the public form shows a read-only review screen and registers the request only after explicit confirmation, fully server-side and working without JavaScript — where many “button-only” plugins register the request on the very first click.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>The only plugin in the directory\u003C\u002Fstrong> that issues a SHA-256 receipt hash as durable-medium proof of every withdrawal request, recoverable from the stored fields if a dispute later arises.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>The only plugin in the directory\u003C\u002Fstrong> that ships the \u003Cstrong>Annex I.B model withdrawal form\u003C\u002Fstrong> dynamically generated from the shop data, with a printable view — meeting the Art. 6(1)(h) information obligation that the new directive does \u003Cem>not\u003C\u002Fem> replace.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>The only plugin in the directory\u003C\u002Fstrong> that injects the \u003Cstrong>two consent checkboxes\u003C\u002Fstrong> (Art. 16(m) digital content and Art. 14(4)(a) service started early) at the WooCommerce checkout, with durable proof persisted on the order.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>The only plugin in the directory\u003C\u002Fstrong> that ships \u003Cstrong>Article 16 product\u002Fcategory exclusions with full subcategory inheritance\u003C\u002Fstrong> — competing plugins gate this behind their own paid Pro tier.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Native integration with the WordPress GDPR tools\u003C\u002Fstrong> (Privacy Policy snippet + personal-data exporter and eraser) — no second GDPR plugin to install.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Standalone or with WooCommerce.\u003C\u002Fstrong> Works without WooCommerce as a self-contained tool (form, shortcode, log, emails, SHA-256, GDPR, Annex I.B) and lights up store-specific features automatically when WooCommerce is detected.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Compatible by default\u003C\u002Fstrong> with Sequential Order Numbers (free and Pro) and Custom Order Numbers for WooCommerce (Tyche and WPFactory), with a filter for any other numbering scheme.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Configurable from the settings UI\u003C\u002Fstrong>, without writing code: deadline basis (order date vs. completion date) and grace days plus an optional strict deadline mode, eligible order statuses, withdrawal page, notification email (now accepting several recipients), email sender and editable status-email texts, consent text per type, excluded-notice text per type, editable form intro, optional B2B consumer self-declaration, Annex I.B trader address\u002Fphone\u002Femail, and which roles may manage requests.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Developer-friendly\u003C\u002Fstrong>: 11 documented filters + 4 actions so agencies can extend it without forking.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Maintained by a Spanish WordPress trainer with 20+ years on the platform\u003C\u002Fstrong>: bundled es_ES translation, prompt replies on the WordPress.org support forum and an active roadmap of free improvements (classic widget, Gutenberg block, dashboard widget, custom WC order status and more — all free).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Roadmap\u003C\u002Fh3>\n\u003Cp>Planned for upcoming free versions:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>WooCommerce Checkout block support\u003C\u002Fstrong> for the Art. 16(m) and Art. 14(4)(a) consent checkboxes, using \u003Ccode>woocommerce_register_additional_checkout_field()\u003C\u002Fcode> so the consents work on stores that have already migrated from the classic \u003Ccode>[woocommerce_checkout]\u003C\u002Fcode> shortcode to the block.\u003C\u002Fli>\n\u003Cli>Classic widget to surface the withdrawal link in themes with widget areas.\u003C\u002Fli>\n\u003Cli>Gutenberg block for the withdrawal link, fully supported in block themes (align, color, typography).\u003C\u002Fli>\n\u003Cli>Dashboard widget with counters, pending requests and monthly basic stats.\u003C\u002Fli>\n\u003Cli>Custom WooCommerce order status “Withdrawal requested” with automatic transition on acceptance.\u003C\u002Fli>\n\u003Cli>Urgency indicators in the request list (days remaining, expired).\u003C\u002Fli>\n\u003Cli>PDF download of the request with the SHA-256 receipt hash printed on it, reusing the same standalone-print infrastructure as the Annex I.B view.\u003C\u002Fli>\n\u003Cli>Signed token in the email link so guest customers can check status without logging in.\u003C\u002Fli>\n\u003Cli>Rate limiting on the public form to prevent abuse.\u003C\u002Fli>\n\u003Cli>Optional IBAN field to speed up manual refunds.\u003C\u002Fli>\n\u003Cli>HTML email templates that inherit the WooCommerce email theme.\u003C\u002Fli>\n\u003Cli>Optional modal display mode for the shortcode.\u003C\u002Fli>\n\u003Cli>Visible audit log on each request detail screen (status transitions, admin comments, email-delivery timestamps).\u003C\u002Fli>\n\u003Cli>Optional opt-in auto-injection of the withdrawal link in \u003Ccode>wp_footer\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Privacy\u003C\u002Fh3>\n\u003Cp>This plugin stores the following personal data for each withdrawal request, exclusively to fulfil the legal traceability of consumer rights and to allow the shop to handle the request:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Customer name and email address (required to contact the consumer about the request).\u003C\u002Fli>\n\u003Cli>Order reference and order date (required to validate the request against the purchase).\u003C\u002Fli>\n\u003Cli>IP address and User-Agent string (required to evidence when and how the request was submitted, in line with the directive’s “durable medium” requirement).\u003C\u002Fli>\n\u003Cli>Submission timestamp (UTC) and SHA-256 receipt hash (required to recompute and verify the integrity of the original submission if disputed).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Data is stored as a private custom post type entry (\u003Ccode>ayudawp_withdrawal\u003C\u002Fcode>) accessible only to administrators. The plugin does not transmit any data to third-party services; all communication happens between the shop and the customer via standard WordPress emails.\u003C\u002Fp>\n\u003Cp>You should add a section to your site’s privacy policy describing this storage. The plugin contributes a suggested Privacy Policy snippet that you can paste from \u003Cstrong>Settings \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Privacy \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Policy Guide\u003C\u002Fstrong>. Withdrawal data is also exposed to the native WordPress \u003Cstrong>Tools \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Export Personal Data\u003C\u002Fstrong> and \u003Cstrong>Tools \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Erase Personal Data\u003C\u002Fstrong> screens (filtered by customer email).\u003C\u002Fp>\n\u003Ch3>Support\u003C\u002Fh3>\n\u003Cp>Need private support or custom development?\u003C\u002Fp>\n\u003Cp>Do you need one-on-one help, priority troubleshooting, or a custom feature, integration, or tweak built specifically for your site? I offer private support and custom development. Just \u003Ca href=\"mailto:eu-withdrawal-compliance@ayudawp.com\" rel=\"nofollow ugc\">contact me\u003C\u002Fa> and tell me what you need.\u003C\u002Fp>\n\u003Cp>Need help or have suggestions?\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fservicios.ayudawp.com\" rel=\"nofollow ugc\">Official website\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fsupport\u002Fplugin\u002Feu-withdrawal-compliance\u002F\" rel=\"ugc\">WordPress support forum\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002FAyudaWordPressES\" rel=\"nofollow ugc\">YouTube channel\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fayudawp.com\" rel=\"nofollow ugc\">Documentation and tutorials\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Love the plugin? Please leave us a 5-star review and help spread the word!\u003C\u002Fp>\n\u003Ch3>About AyudaWP.com\u003C\u002Fh3>\n\u003Cp>We are specialists in WordPress security, SEO, AI and performance optimization plugins. We create tools that solve real problems for WordPress site owners while maintaining the highest coding standards and accessibility requirements.\u003C\u002Fp>\n","Free, complete EU Directive 2023\u002F2673 toolkit: withdrawal button, checkout consents, Annex I.B form, Article 16 exclusions, SHA-256 proof.",1000,5163,14,"2026-07-17T22:30:00.000Z","7.0.2",[55,20,56,23,24],"compliance","gdpr","https:\u002F\u002Fservicios.ayudawp.com","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Feu-withdrawal-compliance.2.1.0.zip",{"slug":60,"name":61,"version":62,"author":63,"author_profile":64,"description":65,"short_description":66,"active_installs":49,"downloaded":67,"rating":13,"num_ratings":68,"last_updated":69,"tested_up_to":53,"requires_at_least":17,"requires_php":18,"tags":70,"homepage":74,"download_link":75,"security_score":13,"vuln_count":27,"unpatched_count":27,"last_vuln_date":28,"fetched_at":29},"wt-eu-withdrawal-button","WebToffee EU Order Withdrawal Button for WooCommerce","1.0.7","WebToffee","https:\u002F\u002Fprofiles.wordpress.org\u002Fwebtoffee\u002F","\u003Cp>From June 19, 2026, EU Directive 2023\u002F2673 requires every online store selling to EU consumers to provide a clear, easily accessible online withdrawal function. Customers must be able to cancel a purchase digitally — just as easily as they placed the order.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>EU Withdrawal Button for WooCommerce\u003C\u002Fstrong> by WebToffee makes it straightforward to comply. The plugin adds a withdrawal button to the customer’s My Account orders page, a guided withdrawal form, a two-step confirmation flow, and a dedicated admin dashboard to manage all incoming requests.\u003C\u002Fp>\n\u003Cp>No coding required. Works right out of the box.\u003C\u002Fp>\n\u003Ch4>What the plugin does\u003C\u002Fh4>\n\u003Cp>\u003Cstrong>For your customers:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>A “Request Withdrawal” button appears directly on the My Account orders list — visible only during the active withdrawal period\u003C\u002Fli>\n\u003Cli>Customers can select which items to withdraw (full order or individual products)\u003C\u002Fli>\n\u003Cli>A simple form collects their name, email, and an optional reason\u003C\u002Fli>\n\u003Cli>A confirmation step prevents accidental submissions (“Are you sure you want to submit this withdrawal request?”)\u003C\u002Fli>\n\u003Cli>Customers receive an email confirmation once the request is submitted\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>For you as the store admin:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>A clean Withdrawals dashboard under WooCommerce > Withdrawals shows all requests at a glance\u003C\u002Fli>\n\u003Cli>At-a-glance stats: open requests and approvals over the last 30 days\u003C\u002Fli>\n\u003Cli>Filter requests by status, date range, or search (order # or receipt hash)\u003C\u002Fli>\n\u003Cli>View full request details — order info, customer email, request type, reason, and a complete activity log\u003C\u002Fli>\n\u003Cli>Approve or reject requests with one click\u003C\u002Fli>\n\u003Cli>Configure who receives admin withdrawal notification emails — defaults to your store email, with support for multiple recipients\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Key features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>Withdrawal button on the orders page\u003C\u002Fstrong> — visible to customers within the configured withdrawal window\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Partial withdrawal support\u003C\u002Fstrong> — customers can withdraw individual items instead of the entire order\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Two-step confirmation flow\u003C\u002Fstrong> — meets the directive’s requirement to confirm the customer’s intent\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Dedicated admin dashboard\u003C\u002Fstrong> — manage, filter, approve, or reject all withdrawal requests in one place\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Add footer link\u003C\u002Fstrong> — optionally embed a withdrawal link in your store footer to meet visibility requirements\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Guest withdrawal support\u003C\u002Fstrong> — guest users can submit their order number and billing email, which is matched against WooCommerce order history, then confirmed via an email verification step before the request is created\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Withdrawal button shortcode\u003C\u002Fstrong> — use \u003Ccode>[wt_eu_order_withdrawal]\u003C\u002Fcode> to place a withdrawal button on any page or post.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Configurable withdrawal period\u003C\u002Fstrong> — set the window to 2, 7, 14, or 30 days (EU standard is 14 days), starting from order created or a chosen WooCommerce order status\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Product exclusions\u003C\u002Fstrong> — exclude by product type, entire categories, or specific individual products\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Admin notification recipients\u003C\u002Fstrong> — choose one or more email addresses to receive new withdrawal request alerts (store email added by default)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Customer contact email\u003C\u002Fstrong> — set the address shown to customers in rejection emails so they know who to reach out to\u003C\u002Fli>\n\u003Cli>\u003Cstrong>SHA-256 receipt hash\u003C\u002Fstrong> — every withdrawal request gets a unique SHA-256 receipt hash, included in withdrawal notification emails and shown in the request details on the admin dashboard, for easy reference and record-keeping\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Order status automation\u003C\u002Fstrong> — automatically update order status when a request is submitted or approved\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Reason field\u003C\u002Fstrong> — optionally require customers to provide a reason when submitting a request\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Display scope control\u003C\u002Fstrong> — show the withdrawal form globally or limit it to WooCommerce pages only\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Data management\u003C\u002Fstrong> — optionally delete all plugin data on uninstall\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Why this matters\u003C\u002Fh4>\n\u003Cp>Under \u003Ca href=\"https:\u002F\u002Feur-lex.europa.eu\u002Feli\u002Fdir\u002F2023\u002F2673\u002Foj\u002Feng\" rel=\"nofollow ugc\">EU Directive 2023\u002F2673\u003C\u002Fa>, any business that lets EU consumers sign up for or purchase something online must also let them cancel online — through the same website or app. Simply hiding a withdrawal form in a footer PDF or asking customers to email you is no longer sufficient.\u003C\u002Fp>\n\u003Cp>The directive specifically requires:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>A withdrawal function that is \u003Cstrong>prominently displayed\u003C\u002Fstrong> and \u003Cstrong>continuously available\u003C\u002Fstrong> during the withdrawal period\u003C\u002Fli>\n\u003Cli>The function must be \u003Cstrong>clearly labelled\u003C\u002Fstrong> (e.g. “Withdraw from contract here” or similar)\u003C\u002Fli>\n\u003Cli>A \u003Cstrong>two-step confirmation\u003C\u002Fstrong> to prevent accidental withdrawals\u003C\u002Fli>\n\u003Cli>An \u003Cstrong>acknowledgement of receipt\u003C\u002Fstrong> sent to the customer on a durable medium (e.g. email)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>This plugin implements all of the above.\u003C\u002Fp>\n\u003Ch4>Getting started\u003C\u002Fh4>\n\u003Cp>For a complete walkthrough, see the \u003Ca href=\"https:\u002F\u002Fwww.webtoffee.com\u002Fdocs\u002Fwoocommerce-eu-withdrawal\u002Fhow-to-setup-woocommerce-order-withdrawal-button-to-comply-with-eu-directives\u002F\" rel=\"nofollow ugc\">setup guide\u003C\u002Fa> or watch the video below.\u003Cbr \u002F>\n\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FhXjS5bEtIJY?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\u003C\u002Fp>\n\u003Col>\n\u003Cli>Install and activate the plugin\u003C\u002Fli>\n\u003Cli>Go to \u003Cstrong>WooCommerce > Withdrawals > Settings\u003C\u002Fstrong> to configure your preferences\u003C\u002Fli>\n\u003Cli>Set your withdrawal page, period, and footer link options\u003C\u002Fli>\n\u003Cli>Publish the withdrawal page (created automatically as a draft on installation)\u003C\u002Fli>\n\u003Cli>Test the flow by placing a test order and using the Request Withdrawal button\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>Support\u003C\u002Fh4>\n\u003Cp>For questions or assistance, visit our \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fsupport\u002Fplugin\u002Fwt-eu-withdrawal-button\u002F\" rel=\"ugc\">support page\u003C\u002Fa>.\u003C\u002Fp>\n","Add a legally compliant EU withdrawal button to your WooCommerce store. It allows customers to exercise their 14-day right of withdrawal online.",3342,8,"2026-07-13T05:11:00.000Z",[71,72,73,22,24],"eu-compliance","eu-directive","eu-withdrawal","https:\u002F\u002Fwww.wordpress.org\u002Fplugins\u002Fwt-eu-withdrawal-button","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwt-eu-withdrawal-button.1.0.7.zip",{"slug":77,"name":78,"version":44,"author":79,"author_profile":80,"description":81,"short_description":82,"active_installs":83,"downloaded":84,"rating":13,"num_ratings":85,"last_updated":86,"tested_up_to":53,"requires_at_least":87,"requires_php":18,"tags":88,"homepage":91,"download_link":92,"security_score":13,"vuln_count":27,"unpatched_count":27,"last_vuln_date":28,"fetched_at":29},"eu-withdrawal-button-for-woocommerce","EU Withdrawal Button for WooCommerce","riinagency","https:\u002F\u002Fprofiles.wordpress.org\u002Fnalut\u002F","\u003Cp>EU Directive 2023\u002F2673 introduces new requirements for online stores regarding consumer withdrawal rights, taking effect on \u003Cstrong>June 19, 2026\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>EU Withdrawal Button for WooCommerce\u003C\u002Fstrong> helps you implement a clear, accessible withdrawal flow for your customers:\u003C\u002Fp>\n\u003Ch4>The 4-Step Flow\u003C\u002Fh4>\n\u003Col>\n\u003Cli>\u003Cstrong>Visible Button\u003C\u002Fstrong> — Sticky withdrawal bar (shown across your store by default, configurable per page type; always on My Account)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Withdrawal Form\u003C\u002Fstrong> — Customer enters order number + email for verification; partial withdrawals supported\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Confirmation Step\u003C\u002Fstrong> — Order summary with a separate “Confirm withdrawal” button\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Notifications\u003C\u002Fstrong> — Confirmation email to customer + notification to merchant\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>Free features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Sticky bar with configurable text and button, plus an optional footer link\u003C\u002Fli>\n\u003Cli>Modal popup or dedicated page mode\u003C\u002Fli>\n\u003Cli>Order validation (order number + email + withdrawal window check)\u003C\u002Fli>\n\u003Cli>Partial withdrawals: customers select the items and quantities to withdraw\u003C\u002Fli>\n\u003Cli>Optional refund IBAN field — stored encrypted, masked in lists and exports, auto-erased 30 days after completion\u003C\u002Fli>\n\u003Cli>Custom WooCommerce order statuses: “Withdrawal Requested” and “Withdrawal Closed”\u003C\u002Fli>\n\u003Cli>Withdrawals overview in the WordPress admin\u003C\u002Fli>\n\u003Cli>WooCommerce email integration (shows in WooCommerce \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Settings \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Emails)\u003C\u002Fli>\n\u003Cli>Guest-friendly withdrawal link in WooCommerce order emails — no account needed\u003C\u002Fli>\n\u003Cli>Return instructions link in the customer confirmation email\u003C\u002Fli>\n\u003Cli>WordPress privacy tools integration (GDPR data export and erasure)\u003C\u002Fli>\n\u003Cli>Support for custom order number plugins (Sequential Order Numbers, etc.)\u003C\u002Fli>\n\u003Cli>WCAG 2.1 AA accessible (keyboard navigation, focus trap, ARIA labels)\u003C\u002Fli>\n\u003Cli>Rate limiting for abuse prevention\u003C\u002Fli>\n\u003Cli>Translations bundled: Estonian, Finnish, French, Swedish, Italian, Dutch\u003C\u002Fli>\n\u003Cli>HPOS (High-Performance Order Storage) compatible\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Pro (paid)\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>One-click Complete\u002FReject actions with automatic customer emails\u003C\u002Fli>\n\u003Cli>My Account widgets: countdown badges and withdrawal status column\u003C\u002Fli>\n\u003Cli>Thank-You page and order-view withdrawal boxes\u003C\u002Fli>\n\u003Cli>Custom colors, styling and custom CSS\u003C\u002Fli>\n\u003Cli>Excluded categories and product-level exceptions\u003C\u002Fli>\n\u003Cli>GDPR consent checkbox on the withdrawal form\u003C\u002Fli>\n\u003Cli>Payment-method-aware IBAN field (hide for card payments)\u003C\u002Fli>\n\u003Cli>Statistics dashboard, CSV export, REST API\u003C\u002Fli>\n\u003Cli>Priority support\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Who Is This For?\u003C\u002Fh4>\n\u003Cp>WooCommerce store owners who sell to EU consumers and want to provide a clear withdrawal process for their customers.\u003C\u002Fp>\n\u003Ch4>Disclaimer\u003C\u002Fh4>\n\u003Cp>This plugin is a technical tool that helps implement a withdrawal flow. It does not constitute legal advice and does not guarantee compliance with any specific regulation. Consult a legal professional to ensure your store meets all applicable requirements.\u003C\u002Fp>\n\u003Ch3>Translations\u003C\u002Fh3>\n\u003Cp>Bundled translations and their contributors:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Estonian (et) — Riin Agency\u003C\u002Fli>\n\u003Cli>Finnish (fi) — Riin Agency\u003C\u002Fli>\n\u003Cli>French (fr_FR) — Riin Agency (community review welcome)\u003C\u002Fli>\n\u003Cli>Swedish (sv_SE) — Riin Agency (community review welcome)\u003C\u002Fli>\n\u003Cli>Italian (it_IT) — contributed by \u003Ca href=\"https:\u002F\u002Fwww.artilabio.com\u002F\" rel=\"nofollow ugc\">Cristina Gregolin (Artilabio)\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Dutch (nl_NL) — contributed by \u003Ca href=\"https:\u002F\u002Fbepos.support\u002F\" rel=\"nofollow ugc\">Mark Govaerts (Bepos)\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Want to contribute a translation? Email plugin@riin.eu — you will be credited here.\u003C\u002Fp>\n","Helps WooCommerce store owners implement the withdrawal flow described in EU Directive 2023\u002F2673.",400,1696,2,"2026-07-06T16:02:00.000Z","6.2",[20,89,90,23,24],"eu","returns","https:\u002F\u002Friin.eu\u002Fwithdrawal-plugin","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Feu-withdrawal-button-for-woocommerce.2.1.0.zip",{"slug":94,"name":95,"version":96,"author":97,"author_profile":98,"description":99,"short_description":100,"active_installs":101,"downloaded":102,"rating":13,"num_ratings":103,"last_updated":104,"tested_up_to":53,"requires_at_least":105,"requires_php":106,"tags":107,"homepage":109,"download_link":110,"security_score":13,"vuln_count":27,"unpatched_count":27,"last_vuln_date":28,"fetched_at":29},"bitron-right-of-withdrawal","Bitron Right of Withdrawal","1.7.1","oaron","https:\u002F\u002Fprofiles.wordpress.org\u002Foaron\u002F","\u003Cp>From 19 June 2026, EU member states require every consumer-facing online shop to provide an \u003Cstrong>online withdrawal function\u003C\u002Fstrong> — not just static information, but a continuously available electronic interface where the consumer can declare intent to withdraw, and from which the shop sends an automatic confirmation on a durable medium. In Hungary the same rule applies through the amendment of Government Decree 45\u002F2014.\u003C\u002Fp>\n\u003Cp>Bitron Right of Withdrawal delivers exactly that, accessibly.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>What the plugin does\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>A continuously available, accessible withdrawal form — embeddable via the \u003Ccode>[bitrow_form]\u003C\u002Fcode> shortcode or the \u003Cem>Withdrawal Form\u003C\u002Fem> Gutenberg block, so it drops into any classic-editor page, a block-built layout, or a page builder that handles either.\u003C\u002Fli>\n\u003Cli>Tight WooCommerce integration: the form is surfaced to logged-in customers as a \u003Cem>Withdrawal\u003C\u002Fem> item in their \u003Cem>My Account\u003C\u002Fem> menu, but only while they have at least one order still inside the window — so a customer with nothing eligible doesn’t see a dead link.\u003C\u002Fli>\n\u003Cli>A withdrawal link is automatically attached to WooCommerce’s customer order emails (processing, completed, invoice) while the window is open — a discreet text link (not a prominent button) to avoid accidental clicks. Its position in the email (top, after the order details, or bottom — bottom by default) and both the surrounding message text and the link label are configurable under \u003Cem>Settings \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Email\u003C\u002Fem>. HTML and plain-text variants, with a filter to extend the list of carrier emails.\u003C\u002Fli>\n\u003Cli>Guest and logged-in customer paths. A logged-in customer sees a select of their own in-window orders. For guests, optional \u003Cstrong>email verification\u003C\u002Fstrong>: with the free \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fonecode-login\u002F\" rel=\"ugc\">OneCode Login\u003C\u002Fa> plugin active, the guest proves they own their email with a one-time code, and the form then loads that email’s orders just like for a logged-in customer — closing the gap where anyone who knew an order number and the billing email could file on someone else’s behalf. When email verification is not in force, an unverified guest is never shown any order data: instead of looking up an order, they file a free-text withdrawal declaration (no order is matched server-side, no line items or totals are disclosed), which is recorded flagged as unverified for the shop to match by hand. Order data is therefore only ever shown to logged-in or email-verified customers.\u003C\u002Fli>\n\u003Cli>Item-level partial withdrawal. After the customer picks an order, they tick exactly which line items (and quantities) they want to withdraw from — the form is not all-or-nothing.\u003C\u002Fli>\n\u003Cli>Bank-account capture for non-card payments. When the original gateway can’t refund automatically (e.g. cash on delivery, bank transfer), the customer enters a Hungarian IBAN or domestic GIRO account number — validated client- and server-side with MOD-97 \u002F CDV checks — so the shop has everything to wire the refund manually.\u003C\u002Fli>\n\u003Cli>Customizable form copy and brand colors. An optional intro paragraph above the form and the submit-button colors (background + text) are configurable from \u003Cem>Settings \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Form\u003C\u002Fem>, with a live WCAG contrast meter that announces the ratio as you type so a custom brand color cannot quietly drop below AA. An “advanced” panel additionally exposes the form body text, wrapper background, and input\u002Ffieldset border colors for themes that need the form to blend in — these three are not contrast-checked and carry an explicit “you own the contrast” warning. The same values can be overridden per-instance through \u003Ccode>[bitrow_form]\u003C\u002Fcode> shortcode attributes or the block’s \u003Cem>Inspector\u003C\u002Fem> panel.\u003C\u002Fli>\n\u003Cli>Automatic confirmation email to the customer (durable medium) and notification to the shop admin, with editable subject and body templates for both — empty fields fall back to safe i18n defaults so the plugin is functional out of the box. The admin notification recipient is a configurable email address (defaults to the site administration email); leave it empty to switch admin notifications off.\u003C\u002Fli>\n\u003Cli>Optional business-customer exclusion: because the right of withdrawal is a consumer right, shops that also sell to VAT-registered businesses can switch the online form off for orders carrying a business marker (e.g. a VAT-number checkout field). Business buyers are shown a contact pointer instead; consumer orders are unaffected. It’s a technical filter, not legal advice.\u003C\u002Fli>\n\u003Cli>Per-product and per-category withdrawal exemptions for the CRD §16 \u002F 45-2014 §29 carve-outs (perishables, custom-made, sealed digital downloads, etc.). The withdrawal form still shows exempted items inside an eligible order so the customer sees what they bought, but the quantity input is locked at zero with a visible “Not eligible for withdrawal” badge; orders that consist entirely of exempt items are blocked at step 1 with a contact pointer. A separate \u003Cem>Settings \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Exclusions\u003C\u002Fem> tab manages the lists with searchable autocompletes.\u003C\u002Fli>\n\u003Cli>Exclusion type split — excluded by law vs waivable. The exclusion settings separate two legally distinct cases: “excluded by law” items (perishables, custom-made, opened sealed goods) where the right never applies and no customer action is involved, and “waivable” items where the right exists but the customer can expressly give it up. Each case has its own product and category pickers; existing exclusions keep behaving as “by law”.\u003C\u002Fli>\n\u003Cli>Checkout withdrawal waiver. For waivable goods (typically digital content), the shop can show a consent checkbox at checkout through which the customer expressly waives the right of withdrawal for the affected items. It appears only when the cart actually contains a waivable item, works on both the classic shortcode checkout and the block-based (Store API) checkout, can be optional or mandatory, and records the consent on the order as evidence (timestamp, IP, a fingerprint of the statement text, the covered products and the mode). Off by default; enable and word it under \u003Cem>Settings \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Exclusions\u003C\u002Fem>.\u003C\u002Fli>\n\u003Cli>“Withdrawals” hub in the customer’s \u003Cem>My Account\u003C\u002Fem> area — a single durable, log-in-gated landing page for everything withdrawal-related: a one-click button to start a new declaration (when the form page is configured), plus the full list of past declarations submitted from the account (reference number, date, order link, items, refund preference, status). The menu item appears only when the customer has at least one past record OR an order still inside the withdrawal window; the list itself is privacy-scoped to the customer’s own account email and never reveals records filed under a different email.\u003C\u002Fli>\n\u003Cli>Minimal record-keeping with unique \u003Ccode>BITROW-XXXXXX\u003C\u002Fcode> references for evidentiary value, plus a per-record detail page in the admin.\u003C\u002Fli>\n\u003Cli>Admin can mark a record as \u003Cem>closed\u003C\u002Fem> (and reopen it) once the case is resolved, with timestamp and the closing user recorded — keeps the working list focused on what’s still pending.\u003C\u002Fli>\n\u003Cli>Withdrawal status on the order screen. When an order has an associated withdrawal, the WooCommerce order-edit screen shows a “Right of withdrawal” panel with the withdrawal’s status and a direct link to its record.\u003C\u002Fli>\n\u003Cli>Optional withdrawal column on the orders list. A \u003Cem>Settings \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> General\u003C\u002Fem> switch (off by default) adds a column to the WooCommerce orders list flagging which orders have a withdrawal and its status (a dash when none). HPOS- and legacy-orders compatible.\u003C\u002Fli>\n\u003Cli>WCAG 2.1 AA accessibility throughout — programmatic labels, focus management, live regions, sufficient contrast.\u003C\u002Fli>\n\u003Cli>GDPR integration with WordPress’ personal data export and erase tools, plus a suggested paragraph for the Privacy Policy Guide.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Compatibility\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>The plugin integrates with WooCommerce orders. It declares HPOS (High-Performance Order Storage) compatibility and uses the WooCommerce CRUD API throughout. WooCommerce is referenced for compatibility only — the trademark is not used in the plugin name or slug.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Important — what this plugin does NOT do\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>This is a technical tool, not legal advice, and does not by itself guarantee legal compliance. The plugin does not generate Terms of Service text, privacy-policy text, or other legal content — those must be prepared by your own lawyer. The confirmation email contains only a factual acknowledgement (received, when, with which ID, what content); any “what happens next” wording is the shop operator’s own policy and must come from you.\u003C\u002Fp>\n\u003Cp>The plugin records each withdrawal and notifies you, but it does not issue refunds automatically. Refunds remain a deliberate admin action through WooCommerce’s standard refund interface.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Privacy\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>The plugin stores only what is necessary to acknowledge and document the withdrawal: name, email, order reference, optional note, timestamps and a unique identifier. No IP address is stored in plain text. On plugin removal the stored records are kept by default (so an accidental deactivation cannot destroy evidence); a setting lets you opt in to deletion at uninstall.\u003C\u002Fp>\n\u003Ch3>Pro version\u003C\u002Fh3>\n\u003Cp>The free plugin covers the full legal compliance core on its own. \u003Cstrong>Bitron Right of Withdrawal Pro\u003C\u002Fstrong> adds a convenience and automation layer on top, for shops that process withdrawals regularly:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>One-click WooCommerce refund\u003C\u002Fstrong> — issue the refund straight from the withdrawal record, instead of re-entering it by hand in WooCommerce.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Status management and history\u003C\u002Fstrong> — a richer status workflow (received, in progress, goods returned, refunded, rejected) with a full audit trail of who changed what and when.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Automation rules\u003C\u002Fstrong> — define rules that act on incoming withdrawals automatically (status transitions, notifications), so routine cases handle themselves.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Custom form fields\u003C\u002Fstrong> — add your own fields to the withdrawal form and store them on the record.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Searchable admin + CSV export\u003C\u002Fstrong> — find any declaration fast and export the list for accounting or reporting.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Webhooks\u003C\u002Fstrong> — push withdrawal events to your CRM, ERP or any external system in real time.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>REST API\u003C\u002Fstrong> — read and manage withdrawal records programmatically from your own integrations.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The Pro plugin is standalone: it contains the full compliance core plus the convenience layer, so you install it instead of the free plugin, not alongside it. Pro adds convenience, not extra compliance — the free plugin already makes you compliant.\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fbitron.hu\u002Fwoocommerce-elallas\" rel=\"nofollow ugc\">Learn more and see pricing\u003C\u002Fa>\u003C\u002Fp>\n","Accessible online withdrawal form. Built for the EU Consumer Rights Directive update effective 19 June 2026.",300,1638,4,"2026-07-06T10:05:00.000Z","6.4","8.0",[108,20,56,21,23],"accessibility","","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fbitron-right-of-withdrawal.1.7.1.zip",{"slug":112,"name":113,"version":114,"author":115,"author_profile":116,"description":117,"short_description":118,"active_installs":119,"downloaded":120,"rating":13,"num_ratings":121,"last_updated":122,"tested_up_to":53,"requires_at_least":123,"requires_php":18,"tags":124,"homepage":125,"download_link":126,"security_score":13,"vuln_count":27,"unpatched_count":27,"last_vuln_date":28,"fetched_at":29},"buddypilot-withdrawal","BuddyPilot Withdrawal – Easy Returns for WooCommerce","1.0.21","BuddyPilot","https:\u002F\u002Fprofiles.wordpress.org\u002Fbuddypilot\u002F","\u003Cp>\u003Cstrong>BuddyPilot Withdrawal – Easy Returns for WooCommerce\u003C\u002Fstrong> adds a complete returns and withdrawal workflow to your store: the mandatory EU withdrawal button required by \u003Cstrong>Article 11a of EU Directive 2023\u002F2673\u003C\u002Fstrong>, an online return form for customers, and a declarations dashboard for the operator.\u003C\u002Fp>\n\u003Cp>From \u003Cstrong>19 June 2026\u003C\u002Fstrong>, every WooCommerce store with EU customers must provide a clearly visible, easily accessible withdrawal function (“withdraw from contract here” button) alongside the existing right of withdrawal informational requirements.\u003C\u002Fp>\n\u003Cp>The plugin works alongside your return policy: the customer withdraws from the contract online during the cooling-off period (14 days by default, configurable), and you process the WooCommerce return and refund with native tools.\u003C\u002Fp>\n\u003Ch4>What the plugin does\u003C\u002Fh4>\n\u003Cp>\u003Cstrong>Customer-facing\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Article 11a compliant “Withdraw from contract here” button\u003C\u002Fstrong> on the My Account order detail page\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Two-step withdrawal form\u003C\u002Fstrong>: item selection, declaration preview, one-click confirm\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Variable product support\u003C\u002Fstrong>: each variant (size, colour, etc.) appears with its full attribute labels as a separate line in the withdrawal form\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Guest checkout support\u003C\u002Fstrong> via direct verification flow (email + order number, no login required)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>My Account withdrawal history\u003C\u002Fstrong> list and declaration detail page\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Article 16(m) consent capture\u003C\u002Fstrong> at checkout for digital and virtual goods (configurable: required, optional, or hidden)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Customer declaration email\u003C\u002Fstrong> serving as the durable-medium acknowledgement required by Article 11a(3)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Withdrawal resolved email\u003C\u002Fstrong> sent to the customer after the operator closes the declaration; includes the EU ODR platform link (ec.europa.eu\u002Fconsumers\u002Fodr) when any item is rejected\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Per-item resolution status\u003C\u002Fstrong> visible in the withdrawal form after a declaration is closed: each item shows an “accepted” or “rejected” badge with the rejection reason and ODR link, so the customer understands the outcome without contacting support\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Operator-facing\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Order edit metabox\u003C\u002Fstrong> for registering declarations received via phone, mail or in person\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Standalone “Add new declaration” page\u003C\u002Fstrong> for high-volume operator queues without leaving the declarations list\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Declarations list\u003C\u002Fstrong> with search, filtering and sorting in WooCommerce admin\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Declaration detail page\u003C\u002Fstrong> with full audit trail and resolution workflow: accept all, reject all, or partial resolution with per-item decisions and individual rejection reasons\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Admin notification email\u003C\u002Fstrong> sent immediately when a customer submits a withdrawal\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Legal and compliance\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Custom order status\u003C\u002Fstrong> \u003Ccode>wc-withdrawal\u003C\u002Fcode> (optional, plugin-registered) with a full change history logged as WooCommerce order notes\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Annex I(A) withdrawal information page\u003C\u002Fstrong> available to generate with one click from Settings\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Annex I(B) model withdrawal form page\u003C\u002Fstrong> available to generate with one click from Settings, published as a WordPress page and auto-linked from order emails and My Account\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Configurable refund period\u003C\u002Fstrong> (default 14 days, matches your contract terms)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Configurable “delivered” statuses\u003C\u002Fstrong> that start the withdrawal clock\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Return cost attribution\u003C\u002Fstrong> (consumer pays or trader pays, per Annex I(A) requirements)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>GDPR personal data export and anonymisation\u003C\u002Fstrong> compatible with WordPress privacy tools\u003C\u002Fli>\n\u003Cli>\u003Cstrong>HPOS compatibility\u003C\u002Fstrong> (High-Performance Order Storage) and legacy post-meta mode\u003C\u002Fli>\n\u003Cli>\u003Cstrong>WCAG 2.2 AA accessibility\u003C\u002Fstrong> compliance on all customer-facing forms\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Polish and English translations\u003C\u002Fstrong> included\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Pro addon\u003C\u002Fh4>\n\u003Cp>Extended functionality is available via the \u003Ca href=\"https:\u002F\u002Fbuddypilot.io\u002Fplugins\u002Fwithdrawal-pro\u002F\" rel=\"nofollow ugc\">BuddyPilot Withdrawal Pro\u003C\u002Fa> addon:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Operator-approved automatic refund built from declared items (one click from the declaration screen)\u003C\u002Fli>\n\u003Cli>Download-count verification: restores withdrawal right when a digital product was never actually downloaded, reducing unjustified refusal of refunds\u003C\u002Fli>\n\u003Cli>WooCommerce Subscriptions support: cancels future renewals, prorates the current billing period per Article 9(2)(b)(iii)\u003C\u002Fli>\n\u003Cli>WooCommerce Product Bundles support: automatic handling by bundle type; for per-item bundles with a configured discount, choose whether partial returns keep the paid amount or forfeit the entire bundle discount\u003C\u002Fli>\n\u003Cli>PDF export of the legal withdrawal declaration\u003C\u002Fli>\n\u003Cli>Country-specific Annex I(B) form generation\u003C\u002Fli>\n\u003C\u002Ful>\n","Easy returns for WooCommerce: EU withdrawal button (Directive 2023\u002F2673), online return form, cooling-off period tracking and operator workflow.",200,1852,3,"2026-07-17T15:52:00.000Z","5.8",[55,90,22,23,24],"https:\u002F\u002Fbuddypilot.io\u002Fplugins\u002Fwithdrawal\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fbuddypilot-withdrawal.1.0.21.zip",{"error":128,"url":129,"statusCode":130,"statusMessage":131,"message":131},true,"http:\u002F\u002Flocalhost\u002Fapi\u002Fplugins\u002Fapg-withdrawal-for-woocommerce\u002Fbundle",404,"no bundle for this plugin yet",{"slug":4,"current_version":6,"total_versions":133,"versions":134},7,[135,141,148,155,162,169,176],{"version":6,"download_url":26,"svn_tag_url":136,"released_at":28,"has_diff":137,"diff_files_changed":138,"diff_lines":28,"trac_diff_url":139,"vulnerabilities":140,"is_current":128},"https:\u002F\u002Fplugins.svn.wordpress.org\u002Fapg-withdrawal-for-woocommerce\u002Ftags\u002F0.6.1\u002F",false,[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fapg-withdrawal-for-woocommerce%2Ftags%2F0.6.0&new_path=%2Fapg-withdrawal-for-woocommerce%2Ftags%2F0.6.1",[],{"version":142,"download_url":143,"svn_tag_url":144,"released_at":28,"has_diff":137,"diff_files_changed":145,"diff_lines":28,"trac_diff_url":146,"vulnerabilities":147,"is_current":137},"0.6.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fapg-withdrawal-for-woocommerce.0.6.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fapg-withdrawal-for-woocommerce\u002Ftags\u002F0.6.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fapg-withdrawal-for-woocommerce%2Ftags%2F0.5.0&new_path=%2Fapg-withdrawal-for-woocommerce%2Ftags%2F0.6.0",[],{"version":149,"download_url":150,"svn_tag_url":151,"released_at":28,"has_diff":137,"diff_files_changed":152,"diff_lines":28,"trac_diff_url":153,"vulnerabilities":154,"is_current":137},"0.5.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fapg-withdrawal-for-woocommerce.0.5.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fapg-withdrawal-for-woocommerce\u002Ftags\u002F0.5.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fapg-withdrawal-for-woocommerce%2Ftags%2F0.4.0&new_path=%2Fapg-withdrawal-for-woocommerce%2Ftags%2F0.5.0",[],{"version":156,"download_url":157,"svn_tag_url":158,"released_at":28,"has_diff":137,"diff_files_changed":159,"diff_lines":28,"trac_diff_url":160,"vulnerabilities":161,"is_current":137},"0.4.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fapg-withdrawal-for-woocommerce.0.4.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fapg-withdrawal-for-woocommerce\u002Ftags\u002F0.4.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fapg-withdrawal-for-woocommerce%2Ftags%2F0.3.0&new_path=%2Fapg-withdrawal-for-woocommerce%2Ftags%2F0.4.0",[],{"version":163,"download_url":164,"svn_tag_url":165,"released_at":28,"has_diff":137,"diff_files_changed":166,"diff_lines":28,"trac_diff_url":167,"vulnerabilities":168,"is_current":137},"0.3.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fapg-withdrawal-for-woocommerce.0.3.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fapg-withdrawal-for-woocommerce\u002Ftags\u002F0.3.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fapg-withdrawal-for-woocommerce%2Ftags%2F0.2.0&new_path=%2Fapg-withdrawal-for-woocommerce%2Ftags%2F0.3.0",[],{"version":170,"download_url":171,"svn_tag_url":172,"released_at":28,"has_diff":137,"diff_files_changed":173,"diff_lines":28,"trac_diff_url":174,"vulnerabilities":175,"is_current":137},"0.2.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fapg-withdrawal-for-woocommerce.0.2.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fapg-withdrawal-for-woocommerce\u002Ftags\u002F0.2.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fapg-withdrawal-for-woocommerce%2Ftags%2F0.1.0&new_path=%2Fapg-withdrawal-for-woocommerce%2Ftags%2F0.2.0",[],{"version":177,"download_url":178,"svn_tag_url":179,"released_at":28,"has_diff":137,"diff_files_changed":180,"diff_lines":28,"trac_diff_url":28,"vulnerabilities":181,"is_current":137},"0.1.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fapg-withdrawal-for-woocommerce.0.1.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fapg-withdrawal-for-woocommerce\u002Ftags\u002F0.1.0\u002F",[],[]]