Description
From 19 June 2026, EU member states require every consumer-facing online shop to provide an online withdrawal function — 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/2014.
Bitron Right of Withdrawal delivers exactly that, accessibly.
What the plugin does
- A continuously available, accessible withdrawal form — embeddable via the
[bitrow_form]shortcode or the Withdrawal Form Gutenberg block, so it drops into any classic-editor page, a block-built layout, or a page builder that handles either. - Tight WooCommerce integration: the form is surfaced to logged-in customers as a Withdrawal item in their My Account 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.
- Withdrawal CTA is automatically attached to WooCommerce’s customer order emails (processing, completed, invoice) while the window is open — HTML and plain-text variants, with a filter to extend the list of carrier emails.
- Guest and logged-in customer paths. A logged-in customer sees a select of their own in-window orders. For guests, optional email verification: with the free OneCode Login 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 OneCode Login isn’t installed, the classic order-number + email path still works, so the plugin remains fully standalone.
- 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.
- 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 / CDV checks — so the shop has everything to wire the refund manually.
- Customizable form copy and brand colors. An optional intro paragraph above the form and the submit-button colors (background + text) are configurable from Settings Form, 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/fieldset 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
[bitrow_form]shortcode attributes or the block’s Inspector panel. - 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.
- Per-product and per-category withdrawal exemptions for the CRD §16 / 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 Settings Exclusions tab manages both lists with searchable autocompletes.
- “Withdrawals” hub in the customer’s My Account 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.
- Minimal record-keeping with unique
BITROW-XXXXXXreferences for evidentiary value, plus a per-record detail page in the admin. - Admin can mark a record as closed (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.
- WCAG 2.1 AA accessibility throughout — programmatic labels, focus management, live regions, sufficient contrast.
- GDPR integration with WordPress’ personal data export and erase tools, plus a suggested paragraph for the Privacy Policy Guide.
Compatibility
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.
Important — what this plugin does NOT do
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.
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.
Privacy
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.
Screenshots

The customer-facing withdrawal form — accessible by default, with a clear two-step flow, programmatic labels, and live status announcements. 
The Withdrawals admin list collects every incoming declaration with its unique BITROW-XXXXXXreference, the linked order, and the customer’s refund preference.
Settings General — withdrawal window length, admin notification, and opt-in record deletion at uninstall. 
Settings Form — optional intro paragraph and brand colors for the submit button, with a live WCAG contrast meter so a custom brand color cannot quietly drop below AA.
Blocks
This plugin provides 1 block.
- Withdrawal Form Accessible withdrawal form for consumer orders. Same output as the [bitrow_form] shortcode.
Installation
- Install the plugin through the Plugins Add New screen, or upload the plugin folder to
/wp-content/plugins/bitron-right-of-withdrawal/. - Activate the plugin through the Plugins screen in WordPress.
- Create the page that should host the form (for example, “Withdrawal declaration”) and either:
- add the shortcode
[bitrow_form]to the page content, or - insert the Withdrawal Form block in the block editor.
- add the shortcode
- Go to Withdrawals Settings in the WordPress admin and select that page in the Form page setting. This is what enables the contextual link in WooCommerce’s “My Account” area and in the order confirmation emails.
- Review the other settings on the same screen (withdrawal window length, admin notification, email subject and body) and save.
FAQ
-
Do I still need to put withdrawal information in my Terms of Service?
-
Yes. The plugin provides the technical function; your Terms of Service must still explain the right of withdrawal, exceptions, and refund handling under your shop’s policy. Your legal advisor drafts that text — the plugin does not.
-
What about the privacy policy?
-
The plugin registers a suggested paragraph in the WordPress Privacy Policy Guide describing what data it processes. Your lawyer should integrate that into the shop’s full privacy policy.
-
Can guests verify their identity before filing a withdrawal?
-
Yes, optionally. Install the free OneCode Login plugin and a guest can prove they own their email with a one-time code; the form then loads the orders for that email. When enabled, this is required for guests (it replaces matching a typed email against the order). Without OneCode Login, guests identify an order by entering its number together with the billing email, as before.
-
Does it automatically refund the customer?
-
No. The plugin records the withdrawal and notifies you; refunds remain a deliberate admin action through WooCommerce’s standard refund interface.
-
Is it accessible?
-
Accessibility is the product’s main differentiator. The form is WCAG 2.1 AA — programmatic labels, keyboard operability, visible focus, live regions for status messages, sufficient contrast. The admin list follows the same standard.
-
Where can my customers see the withdrawal declarations they’ve submitted?
-
Under My Account Withdrawals. The page is a single hub: when you’ve set the withdrawal form page in Settings Form, it shows a “Submit a new withdrawal declaration” button at the top; below it (or alone if the form page isn’t set) it lists every declaration the logged-in customer has filed under their account email, with the reference number, date, the affected order, the items, the refund preference and the current status. The menu item appears only when the customer has at least one past record OR an order still inside the withdrawal window — accounts that never use the feature don’t see a dead menu link. Records filed under a different email (e.g. with the customer logged out) are not surfaced here for privacy reasons; the customer can still find those via the confirmation email they received at submission time.
-
Can I exclude certain products or categories from the withdrawal form?
-
Yes. Under Settings Exclusions there are two pickers — one for individual products, one for product categories — backed by searchable autocompletes. The CRD §16 (transposed in Hungary as 45/2014. Korm. r. §29) lists categories of goods where the right of withdrawal does not apply at all: perishables, custom-made items, sealed digital downloads, items inseparably mixed with others, etc. Use the exclusions to mirror that list for your shop.
Excluded items still appear on the withdrawal form so customers see exactly what they bought, but their quantity input is locked at zero and the row is marked with a “Not eligible for withdrawal” badge. If the customer picks an order whose every line item is excluded, the form blocks at step 1 with a “please contact us” pointer rather than presenting a step 2 where everything is greyed out. The server enforces the same rule on submit — a crafted POST that tries to set a positive quantity on an excluded item is rejected with a clear error.
-
Can I customize the form text, background, and border colors?
-
Yes. Settings Form has a “Form colours (advanced)” card with three colour pickers (form text, form background, input + fieldset border), and the same three are also available as
text,background,borderattributes on the[bitrow_form]shortcode and as inspector controls on the Withdrawal Form block.These three colours are not contrast-checked — there is no single adjacent surface to validate the body text against, so we cannot give you a meaningful ratio in the admin UI. WCAG 2.1 AA requires at least 4.5:1 for normal text and 3:1 for UI borders; verify any combination you change with an external checker (e.g. WebAIM Contrast Checker). The submit-button pair above is still contrast-checked live as before.
-
Can a guest customer use it, or only logged-in users?
-
Both. A guest provides the order number plus the email used on the order; a logged-in customer sees a select of their own in-window orders. The form is never gated behind login.
-
Can I change the 14-day withdrawal window?
-
Yes. Settings Bitron Right of Withdrawal exposes the window length in days. The default is 14 (the EU minimum); some jurisdictions require longer.
-
Does it work with HPOS (High-Performance Order Storage)?
-
Yes. The plugin declares HPOS compatibility and uses the WooCommerce CRUD API rather than direct post-meta access.
-
Where can I find the recorded withdrawals?
-
Under Withdrawals in the WordPress admin sidebar. Each entry has a unique reference (e.g.
BITROW-XXXXXX) and a timestamp; the list is a simple, paginated view.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Bitron Right of Withdrawal” is open source software. The following people have contributed to this plugin.
Contributors“Bitron Right of Withdrawal” has been translated into 1 locale. Thank you to the translators for their contributions.
Translate “Bitron Right of Withdrawal” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.1
- New — guest email verification: with the free OneCode Login plugin active, a not-logged-in customer can prove they own their email with a one-time code before filing. The form emails a code; once entered, it loads the orders for that email just like for a logged-in customer. This replaces the previous “order number + typed email” guest path (which anyone who knew both could use), closing that gap. Controlled by Settings Form Guest email verification (on by default when OneCode Login is available). When OneCode Login isn’t active the setting is shown disabled with a one-click “Install & activate OneCode Login” button (for admins who can install plugins) plus a manual-install link; the classic guest path keeps working so the plugin remains fully standalone. Keyboard- and screen-reader-accessible; the verification step requires JavaScript.
- New — product and category withdrawal exemptions: exclude individual products and whole product categories from the right of withdrawal, for the CRD §16 / 45-2014 §29 carve-outs (perishables, custom-made goods, sealed digital downloads, etc.). Managed from a dedicated Settings Exclusions tab with searchable, fully keyboard- and screen-reader-accessible autocompletes. Exempt items still appear inside an eligible order (with a visible “Not eligible for withdrawal” badge and the quantity locked at zero) so the customer sees what they bought; an order made up entirely of exempt items is blocked at step 1 with a contact pointer.
- New — text and colour customization: match the form to your shop’s look. The submit-button background and text colours come with a live WCAG contrast meter that announces the ratio as you type, and an advanced panel adds the form text, background, and input/fieldset border colours. There’s also an optional intro paragraph and the editable disclaimer below the form. Set everything from Settings Form, or override per-instance through
[bitrow_form]shortcode attributes and the Withdrawal Form block’s Inspector panel. - New — customer “Withdrawals” hub in My Account: a single, logged-in landing page combining a “Submit a new withdrawal declaration” button (when the form page is configured) with the customer’s own record of every declaration filed from their account — reference number, date, affected order, items, refund preference and status. The menu item appears only when there’s something to show, and the list is privacy-scoped to the account email.
- Improvement — for logged-in customers the step-1 name field prefills from the WooCommerce billing record (family name + given name) instead of the WordPress display name, so the declaration carries the real name used at checkout; email prefills from the account.
1.0
- Initial release