Title: Bitron Right of Withdrawal
Author: oaron
Published: <strong>June 2, 2026</strong>
Last modified: July 25, 2026

---

Search plugins

![](https://s.w.org/plugins/geopattern-icon/bitron-right-of-withdrawal.svg)

# Bitron Right of Withdrawal

 By [oaron](https://profiles.wordpress.org/oaron/)

[Download](https://downloads.wordpress.org/plugin/bitron-right-of-withdrawal.1.7.2.zip)

 * [Details](https://wordpress.org/plugins/bitron-right-of-withdrawal/#description)
 * [Reviews](https://wordpress.org/plugins/bitron-right-of-withdrawal/#reviews)
 *  [Installation](https://wordpress.org/plugins/bitron-right-of-withdrawal/#installation)
 * [Development](https://wordpress.org/plugins/bitron-right-of-withdrawal/#developers)

 [Support](https://wordpress.org/support/plugin/bitron-right-of-withdrawal/)

## 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.
 * 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 _Settings  Email_. 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](https://wordpress.org/plugins/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 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.
 * 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. The admin notification recipient is a configurable email address (defaults
   to the site administration email); leave it empty to switch admin notifications
   off.
 * 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.
 * 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 the lists with searchable autocompletes.
 * 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”.
 * 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 _Settings  Exclusions_.
 * “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-XXXXXX` references 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.
 * 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.
 * Optional withdrawal column on the orders list. A _Settings  General_ 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.
 * 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.

### Pro version

The free plugin covers the full legal compliance core on its own. **Bitron Right
of Withdrawal Pro** adds a convenience and automation layer on top, for shops that
process withdrawals regularly:

 * **One-click WooCommerce refund** — issue the refund straight from the withdrawal
   record, instead of re-entering it by hand in WooCommerce.
 * **Status management and history** — a richer status workflow (received, in progress,
   goods returned, refunded, rejected) with a full audit trail of who changed what
   and when.
 * **Automation rules** — define rules that act on incoming withdrawals automatically(
   status transitions, notifications), so routine cases handle themselves.
 * **Custom form fields** — add your own fields to the withdrawal form and store
   them on the record.
 * **Searchable admin + CSV export** — find any declaration fast and export the 
   list for accounting or reporting.
 * **Webhooks** — push withdrawal events to your CRM, ERP or any external system
   in real time.
 * **REST API** — read and manage withdrawal records programmatically from your 
   own integrations.

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.

[Learn more and see pricing](https://bitron.hu/woocommerce-elallas)

## Screenshots

[⌊The customer-facing withdrawal form — accessible by default, with programmatic
labels and live status announcements. Logged-in or email-verified customers get 
a two-step order-matching flow; unverified guests file a free-text declaration instead.⌉⌊
The customer-facing withdrawal form — accessible by default, with programmatic labels
and live status announcements. Logged-in or email-verified customers get a two-step
order-matching flow; unverified guests file a free-text declaration instead.⌉[

The customer-facing withdrawal form — accessible by default, with programmatic labels
and live status announcements. Logged-in or email-verified customers get a two-step
order-matching flow; unverified guests file a free-text declaration instead.

[⌊The Withdrawals admin list collects every incoming declaration with its unique
BITROW-XXXXXX reference, the linked order, and the customer's refund preference.⌉⌊
The Withdrawals admin list collects every incoming declaration with its unique BITROW-
XXXXXX reference, the linked order, and the customer's refund preference.⌉[

The Withdrawals admin list collects every incoming declaration with its unique `
BITROW-XXXXXX` reference, the linked order, and the customer’s refund preference.

[⌊Settings → General — withdrawal window length, admin notification, and opt-in 
record deletion at uninstall.⌉⌊Settings → General — withdrawal window length, admin
notification, and opt-in record deletion at uninstall.⌉[

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.⌉⌊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.⌉[

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

 1. Install the plugin through the _Plugins  Add New_ screen, or upload the plugin 
    folder to `/wp-content/plugins/bitron-right-of-withdrawal/`.
 2. Activate the plugin through the _Plugins_ screen in WordPress.
 3. Create the page that should host the form (for example, “Withdrawal declaration”)
    and either:
 4.  * add the shortcode `[bitrow_form]` to the page content, or
     * insert the _Withdrawal Form_ block in the block editor.
 5. 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.
 6. 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 switch the withdrawal form off for business (B2B) customers?

Yes. The right of withdrawal is a consumer right, so under _Settings  Exclusions_
you can enable “Switch the online form off for business purchases” and choose the
checkout field whose presence on an order marks it as a business purchase — typically
a VAT-number field. The list of available fields is read live from your checkout,
so it reflects whatever fields your theme or other plugins add. Orders that carry
a value in that field are blocked at step 1 with a message pointing the buyer to
your contact channel; orders without it behave exactly as before. This is a technical
filter to match your own policy — it is not legal advice, and you decide which field
marks a business buyer.

### 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`, `border` attributes 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, but what a guest is shown depends on whether they can prove their identity.
A logged-in customer sees a select of their own in-window orders. A guest with email
verification active (the free [OneCode Login](https://wordpress.org/plugins/onecode-login/)
plugin) proves they own their email with a one-time code and then sees that email’s
orders the same way. An unverified guest — when email verification is not in force—
does **not** get the two-step order-matching form and is never shown any order data:
instead they file a free-text withdrawal declaration in their own words (no order
is looked up or matched server-side, no line items or totals are disclosed), recorded
flagged “unverified” for the shop to match by hand. 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

![](https://secure.gravatar.com/avatar/c4f285ea3172d1a0865bc33b3202af9c6bb666726e9f1ec6faa9b5f7f5d86043?
s=60&d=retro&r=g)

### 󠀁[Legjobb elállási plugin / best withdrawal plugin](https://wordpress.org/support/topic/legjobb-elallasi-plugin-best-withdrawal-plugin/)󠁿

 [emokemarketing](https://profiles.wordpress.org/emokemarketing/) June 25, 2026

Nagyon jó plugin, tudja, amit szükséges, könnyen implementálható, gyorsan kezelhető,
jól érthető, egyszerű felület. Köszönjük, hogy létrehoztad./ It’s a great plugin
and construction. It does exactly what it’s supposed to, easy implementation, quick
to use, clear, simple intarface. Thanks your creation!

![](https://secure.gravatar.com/avatar/ed077a080be1bcffe15ea83f0e4aed518067eff51efc597c80f7d4235dabef89?
s=60&d=retro&r=g)

### 󠀁[Right fit](https://wordpress.org/support/topic/right-fit/)󠁿

 [Roland Bende](https://profiles.wordpress.org/rbende/) June 10, 2026

Just what I needed, at the right time.

![](https://secure.gravatar.com/avatar/38ae96673be963873851d63796ded7e32b816a1420a197e1f32419dd464c8be9?
s=60&d=retro&r=g)

### 󠀁[Köszönöm a plugin fejlesztését](https://wordpress.org/support/topic/koszonom-a-plugin-fejleszteset/)󠁿

 [lupusbandi](https://profiles.wordpress.org/lupusbandi/) June 9, 2026

Köszönöm a plugin fejlesztését

![](https://secure.gravatar.com/avatar/27f489cf69c8d5756660b54fbbac0fa8fc76d70ccc8265118a9b80fc2ba68b18?
s=60&d=retro&r=g)

### 󠀁[Perfect solution](https://wordpress.org/support/topic/perfect-solution-290/)󠁿

 [xdya](https://profiles.wordpress.org/xdya/) June 8, 2026

I have tried all current plugins out there that offer a solution for the new EU 
regulation and this one won by a landslide. It is not just a simple form, the user
can pull their order and choose which items they want to send back. (Most plugins
work with a simple form that the user has to fill in manually.) This plugin calculates
the 14 days after order completion but you can also set a custom amount of days 
if you need more days after marking the order completed. The users can also add 
their bank account number, (which is being checked for validity), if they did not
provide their card details. This is especially useful for the Hungarian market, 
where a lot of customers pay by cash. Additionally, the plugin sends emails of withdrawals,
and you can customize texts and category exclusions. Thank you!

 [ Read all 4 reviews ](https://wordpress.org/support/plugin/bitron-right-of-withdrawal/reviews/)

## Contributors & Developers

“Bitron Right of Withdrawal” is open source software. The following people have 
contributed to this plugin.

Contributors

 *   [ oaron ](https://profiles.wordpress.org/oaron/)

“Bitron Right of Withdrawal” has been translated into 1 locale. Thank you to [the translators](https://translate.wordpress.org/projects/wp-plugins/bitron-right-of-withdrawal/contributors)
for their contributions.

[Translate “Bitron Right of Withdrawal” into your language.](https://translate.wordpress.org/projects/wp-plugins/bitron-right-of-withdrawal)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/bitron-right-of-withdrawal/),
check out the [SVN repository](https://plugins.svn.wordpress.org/bitron-right-of-withdrawal/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/bitron-right-of-withdrawal/)
by [RSS](https://plugins.trac.wordpress.org/log/bitron-right-of-withdrawal/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.7.2

 * Fix — the _Withdrawals_ entry in the customer’s _My Account_ menu was missing
   for most customers. Its visibility was tied to owning an order still inside the
   withdrawal window and in one of a few order statuses, so a customer whose order
   was pending, on hold or cancelled — or simply older than the window — lost the
   link to their own past declarations. The entry now appears for any logged-in 
   customer who has at least one order in any status or at least one past declaration;
   accounts with neither still do not get a dead menu link. This changes visibility
   only: whether a withdrawal can actually be filed is still checked when the form
   is submitted (order status and the withdrawal window), so nothing about eligibility
   is relaxed.
 * Fix — the “Submit a new withdrawal declaration” button on the _My Account  Withdrawals_
   page now uses the brand colours configured under _Settings  Form_ (submit-button
   background and text), the same as the form’s own submit button, instead of always
   falling back to the built-in default. Shops that have not overridden the colours
   see no change.
 * Maintenance — compatibility headers refreshed: tested with WordPress 7.0.2 and
   WooCommerce 10.9.4.

#### 1.7.1

 * Fix — on the order-edit screen, the “Mark as closed” / “Reopen” control in the
   withdrawal meta box rendered its form nested inside the WooCommerce order form.
   Browsers drop nested forms but keep their hidden fields, so the meta box’s hidden
   action field leaked into the order form and hijacked the order “Update” button:
   on orders that had a withdrawal record, saving the order silently failed and 
   the status change was lost. The control now renders its form outside the WooCommerce
   order form (via the HTML5 form= attribute), so the order update works normally
   and the close/reopen action still works.

#### 1.7

 * New — the guest email-verification (OTP) texts are now editable in the admin 
   under Settings  Form: the verification prompt shown to unverified guests, the“
   send verification email” and “confirm code” button labels, and the verification-
   code help text. Previously these were fixed built-in strings. Leaving a field
   empty keeps the built-in default.
 * New — the guest email-verification step is now visually highlighted as a clear
   call to action: the prompt sits in an accented callout and its verify/confirm
   button is a solid, filled button so an unverified guest notices the action they
   must take. The emphasis never relies on colour alone (left-border surface plus
   the prompt text and accessible button names), and the button keeps AAA contrast.
 * New — the above verification texts are multilingual: they can be translated per
   language through WPML String Translation or Polylang’s strings screen, like the
   other admin-entered texts. On single-language sites nothing changes.

#### 1.6

 * New — multilingual support (WPML and Polylang): all admin-entered texts (form
   intro and disclaimer, the submission success message, the notification email 
   subjects and bodies, the order-email withdrawal link label and text) can now 
   be translated per language through WPML String Translation or Polylang’s strings
   screen, and the form-page link follows the current language. On single-language
   sites nothing changes.
 * New — the submission success message shown after the form is sent can now be 
   edited in the admin under Settings  Form, including a {uid} placeholder for the
   record’s reference id. Previously it was a fixed built-in text.
 * Fix — secondary button hover: the secondary button’s text colour is now pinned
   on hover, so it no longer turns unreadable (e.g. white-on-white) under themes
   that restyle button hover states.
 * Fix — notification emails are now sent as HTML, so line breaks survive on sites
   where an SMTP or email-template plugin renders mail as HTML. Previously the text
   could arrive as one run-on block.
 * Fix — the withdrawal form now recognises custom order numbers. When a plugin 
   overrides WooCommerce’s default order number (for example MD0574), the form accepts
   the displayed number, not only the original numeric ID.

#### 1.5

 * Hardening (security) — this change was made to satisfy the WordPress.org plugin
   security review. Unverified guests now file a free-text withdrawal declaration
   without any order data being looked up or shown. Order data is disclosed only
   to logged-in or email-verified customers; a visitor who cannot prove their identity
   describes their order in their own words, and the resulting declaration is flagged“
   unverified” in the admin for manual matching before any refund.
 * New — checkout withdrawal waiver: for goods where the right of withdrawal can
   be waived (typically digital content), the shop can now show a consent checkbox
   at checkout through which the customer expressly waives that right for the affected
   items. The checkbox appears only when the cart actually contains a waivable item,
   and works on both the classic shortcode checkout and the block-based (Store API)
   checkout. It can be set globally to optional or mandatory — mandatory blocks 
   placing the order until the box is ticked. The consent is recorded on the order
   as evidence (timestamp, IP address, a fingerprint of the exact statement text,
   the covered products and the mode) and shown in a “Withdrawal waiver” panel on
   the order-edit screen. Off by default; enable and word it under _Settings  Exclusions_.
   For the block-based Checkout, add the “Withdrawal waiver” block to your Checkout
   page once where you want it to appear.
 * New — exclusion type split (excluded by law vs waivable): the withdrawal-exclusion
   settings now separate two legally distinct cases. “Excluded by law” items (perishables,
   custom-made goods, opened hygiene/sealed products) are never withdrawable — the
   right does not apply, no customer action is involved and no checkbox is shown.“
   Waivable” items are those where the right exists but the customer can give it
   up with the checkout consent: only these drive the consent checkbox, and such
   an item stays excluded only when the customer actually consents — without consent
   the right of withdrawal is retained. Existing exclusions keep behaving as “by
   law”, so nothing changes for orders that predate this. Each case has its own 
   product and category pickers under _Settings  Exclusions_.
 * New — withdrawal status on the order screen: when an order has an associated 
   withdrawal, the WooCommerce order-edit screen now shows a “Right of withdrawal”
   panel with the withdrawal’s status and a link straight to its record.
 * New — optional withdrawal column on the orders list: a new _Settings  General_
   switch (“Show a withdrawal column in the orders table”, 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.
 * Fix — bank account entry: a Hungarian IBAN (starting “HU”) could not be typed
   into the field — the letters were stripped as you went, so the prefix never took.
   Typing an IBAN now works character by character (pasting one already worked).
 * Improvement — domestic (GIRO) bank account validation is no longer over-strict:
   it still checks the account format and the bank + branch check digit, but no 
   longer rejects on the account-holder block’s check digit, which is bank-dependent
   and not present at every bank. Valid accounts issued by some banks (e.g. Raiffeisen,
   Budapest Bank) that were previously refused are now accepted.
 * New — the withdrawal link added to WooCommerce order emails is now a discreet
   text link instead of a prominent box, to avoid accidental clicks. Its position
   in the email is configurable (top, after the order details, or bottom — bottom
   by default), and both the surrounding message text and the link label can be 
   customised under _Settings  Email_.
 * Improvement — withdrawal form, step 2: item quantities now start at 0 and the
   customer increases them, instead of pre-filling the full purchased quantity. 
   The per-item maximum still applies, and at least one item must be selected to
   submit.

#### 1.4.1

 * Fix — the “order not found” validation message now displays correctly in Hungarian(
   the message was rewritten in 1.4 and its translation was missing from the shipped
   language pack, so it fell back to English).

#### 1.4

 * Fix — guest (not-logged-in) form completion: the withdrawal form now fills in
   and submits reliably for visitors who are not logged in, including on shops running
   a login-hardening layer (rename wp-login.php, hide-wp-admin, a firewall) that
   could previously break the guest two-step submission. Where 1.3.2 only diagnosed
   an intercepted submit, the guest path now completes.
 * New — Pro version visibility: administrators can clearly see that a Pro version
   exists and, when the Pro plugin is installed, which Pro version is active. The
   free-only upsell never appears once Pro is present.
 * Fix — double-submission guard: a duplicated or retried submission (double click,
   network retry) can no longer create two withdrawal records or send two confirmation
   emails for the same declaration. The legitimate partial / repeat-withdrawal flow
   is unaffected.
 * Fix — GDPR personal-data export now labels the “by later arrangement” refund 
   preference correctly, instead of showing it as “Original payment method”.
 * Fix — the admin “notification could not be sent” notice now escapes its output
   correctly.
 * Hardening — the guest email-verification code requests now carry their own rate
   limit, independent of whether the OneCode Login plugin enforces one, to prevent
   code-request flooding.
 * Maintenance — uninstall now removes every option the plugin can create (customer-
   service contact, diagnostics toggle, error colours); plus minor robustness fixes
   in stored-record decoding and query handling.

#### 1.3.2

 * Fix — when submitting the form fails because a caching or security layer (firewall,“
   hide wp-admin” rule, full-page cache) intercepts the request — most often for
   visitors who are not logged in — the form no longer does nothing silently. It
   now shows an accessible diagnostic with the server response status and a short
   excerpt of what came back, so the shop owner can identify and whitelist the layer
   that is blocking the submission.
 * New — these intercepted submissions are also recorded in the WooCommerce logs(
   WooCommerce  Status  Logs, source “bitron-right-of-withdrawal”), including the
   response status, the page, and whether the visitor was logged in, so the shop
   owner has a server-side trail even if no one reports the problem. Stale-nonce
   failures (a cached form) are logged too. Logging is rate-limited, stores no plain-
   text IP addresses, and can be turned off with the bitrow_diagnostics_enabled 
   filter.

#### 1.3.1

 * Fix — email notifications: the order total no longer leaks raw HTML entities 
   into the plain-text message (e.g. “12 990 Ft” / “Ft”) — the amount is now stripped
   and entity-decoded to clean text such as “12 990 Ft”.
 * New — a dismissible admin banner introduces the Pro version (one-click refunds,
   status management, automation, custom fields, CSV export, webhooks, REST API)
   with a link to learn more. Shown only in the free plugin and only to administrators,
   can be dismissed per-user, and never appears when the Pro plugin is present.

#### 1.3

 * Fix — the bank account number is no longer mandatory: when the original payment
   method cannot auto-refund, the customer can choose “by later arrangement” and
   submit the declaration without entering an account number; the shop arranges 
   the refund details afterwards.
 * Fix — corrected a bank account number handling bug.
 * Fix — resolved a block editor (Gutenberg) issue with the Withdrawal Form block.
 * Fix — Hungarian translation: customer-facing strings switched to the formal register(
   magázás) for a consistent tone across the form, emails and account pages.
 * Improvement — the bank account field now formats the number as you type (IBAN
   in groups of four, domestic accounts as 8-8-8) and shows a “saved as” preview
   of the exact value the shop will receive, cutting down copy-paste and typing 
   mistakes. When you finish typing it checks the IBAN/GIRO and announces the result(
   valid or not) to screen readers, instead of only failing on submit. Fully keyboard-
   and screen-reader-accessible; pasting a number with spaces or hyphens still works.
 * New — repeat-withdrawal guard: once a customer has already declared withdrawal
   for every eligible item in an order, re-selecting that order is blocked at step
   1 with a clear message. If only some items — or some quantities — are still eligible,
   the form lets them through but limits each item to the remaining amount and marks
   the already-withdrawn ones. Enforced server-side, so it cannot be bypassed from
   the browser.
 * New — customisable error colours: the validation error summary and the blocked-
   order notice (the red box above the form) now take their text, background, and
   left-accent-border colours from _Settings  Form  “Error message colours”_, the`[
   bitrow_form]` `error_text` / `error_background` / `error_border` attributes, 
   or the block’s inspector — matching the existing form-colour customisation. Defaults
   are unchanged (and stay WCAG-AA); like the other advanced colours these are not
   contrast-checked, so you own the contrast on any override.
 * New — customer-service contact: a dedicated _Settings  General  “Customer service
   contact”_ section lets you enter a support email and phone number. These are 
   shown on every step-1 message that stops a customer from proceeding — the repeat-
   withdrawal block, the §16-exempt and business-purchase blocks, and orders with
   nothing withdrawable — so they always know how to reach you instead of hitting
   a dead end. Both fields are optional — the email falls back to your WordPress
   administration email when left empty, and the phone is offered only when set.

#### 1.2

 * New — business-customer exclusion: the right of withdrawal is a consumer right,
   so shops that also sell to VAT-registered businesses can now switch the online
   withdrawal form off for business orders. Under _Settings  Exclusions_ enable “
   Switch the online form off for business purchases” and pick the checkout field
   whose presence on an order marks it as a business purchase (for example a VAT-
   number field). The available fields are read live from your checkout (`woocommerce_checkout_fields`),
   grouped by Billing / Shipping / Account / Order. Orders that carry a value in
   that field are blocked at step 1 with a message pointing the buyer to your contact
   channel; orders without it are treated as consumer purchases and work exactly
   as before. This is a technical filter, not legal advice — you decide which field
   marks a business buyer.
 * New — the admin notification setting is now a free-form email field instead of
   an on/off toggle: send each new declaration to any address, not just the site
   administration email. It defaults to your WordPress administration email (filled
   in automatically on update), you can point it elsewhere, and leaving it empty
   turns admin notifications off. An invalid address is rejected with a clear, screen-
   reader-announced error instead of silently disabling notifications.
 * Improvement — the _Form page_ selector is now a searchable, fully keyboard- and
   screen-reader-accessible combobox (the same accessible search already used by
   the product/category exclusion pickers), so picking the form page no longer means
   scrolling a huge dropdown on shops with many pages.
 * Maintenance — resolved all Plugin Check findings (translator comments, escaping,
   prepared-statement annotations) and hardened the test suite (deterministic colour-
   setting isolation). No behaviour change for the customer-facing form.

#### 1.1

 * New — guest email verification: with the free [OneCode Login](https://wordpress.org/plugins/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

## Meta

 *  Version **1.7.2**
 *  Last updated **3 days ago**
 *  Active installations **300+**
 *  WordPress version ** 6.4 or higher **
 *  Tested up to **7.0.2**
 *  PHP version ** 8.0 or higher **
 *  Languages
 * [English (US)](https://wordpress.org/plugins/bitron-right-of-withdrawal/) and
   [Hungarian](https://hu.wordpress.org/plugins/bitron-right-of-withdrawal/).
 *  [Translate into your language](https://translate.wordpress.org/projects/wp-plugins/bitron-right-of-withdrawal)
 * Tags
 * [accessibility](https://wordpress.org/plugins/tags/accessibility/)[consumer rights](https://wordpress.org/plugins/tags/consumer-rights/)
   [GDPR](https://wordpress.org/plugins/tags/gdpr/)[refund](https://wordpress.org/plugins/tags/refund/)
   [withdrawal](https://wordpress.org/plugins/tags/withdrawal/)
 *  [Advanced View](https://wordpress.org/plugins/bitron-right-of-withdrawal/advanced/)

## Ratings

 5 out of 5 stars.

 *  [  4 5-star reviews     ](https://wordpress.org/support/plugin/bitron-right-of-withdrawal/reviews/?filter=5)
 *  [  0 4-star reviews     ](https://wordpress.org/support/plugin/bitron-right-of-withdrawal/reviews/?filter=4)
 *  [  0 3-star reviews     ](https://wordpress.org/support/plugin/bitron-right-of-withdrawal/reviews/?filter=3)
 *  [  0 2-star reviews     ](https://wordpress.org/support/plugin/bitron-right-of-withdrawal/reviews/?filter=2)
 *  [  0 1-star reviews     ](https://wordpress.org/support/plugin/bitron-right-of-withdrawal/reviews/?filter=1)

[Your review](https://wordpress.org/support/plugin/bitron-right-of-withdrawal/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/bitron-right-of-withdrawal/reviews/)

## Contributors

 *   [ oaron ](https://profiles.wordpress.org/oaron/)

## Support

Issues resolved in last two months:

     4 out of 4

 [View support forum](https://wordpress.org/support/plugin/bitron-right-of-withdrawal/)