⚖️ Mandatory from June 19, 2026 – Read all information about the new § 356a BGB
⚖️ § 356a BGB 🔒 GDPR Compliant 📄 PDF Confirmation 🔄 Automatic Updates 🧩 Partial Withdrawal ⭐ Lifetime License 🎨 Product Type Detection ⚙️ Workflow 🌐 Multilingualism ♿ Accessible ⚡ Caching-safe
WooCommerce Plugin

Revocation button for § 356a BGB

Two-stage withdrawal flow, automatic PDF confirmation, and compliance checklist – legally compliant from day one. Pre-configured for WooCommerce with Germanized & German Market. Recognize and exclude personalized products + processing workflow in one plugin. The plugin checks itself!

✓ § 356a BGB Compliant ✓ EU Directive 2023/2673 ✓ GDPR-compliant ✓ WooCommerce HPOS ✓ Partial Withdrawal ✓ Product exclusion ✓ Accessible (WCAG 2.1 AA) ✓ Multilingual & country control

€49 one-time per domain · Lifetime license · All updates included

📰 Read detailed information article on § 356a BGB →
my-shop.de/my-account/orders/
1

Level 1 – Customer clicks

"Revoke contract" in order overview, order details, email or footer.

↩ Revoke contract
2

Step 2 – Confirmation

Order details + identification, then "Confirm revocation".

✓ Confirm revocation

Widerruf erfolgreich eingereicht.
Referenz: WDR-2026-A7B3 · PDF an kunde@email.de

Order #1234 · Product type detection
🎨 Automatic detection per order item
🚫
Engraved mug "Hans Müller"
Custom production · § 312g Abs. 2 No. 1 BGB · Pattern: _tmcartepo
T-shirt blue size L
Standard goods · revocable under § 355 BGB
Gift wrapping
Exception whitelist · no exclusion
🚫
Wooden sign with photo upload
Custom-made · Keyword: "photo" matched
WooCommerce → Orders
📋 Processing Workflow in Order Overview
#1234T-Shirt + Engraved Mug🔵 Received
#1235Sneaker Size 42🟡 In progress
#1236Personalized wooden sign🟢 Refunded
#1237Glasses with Prescription🔴 Objection
#1238Standard Headphones⚪ Completed
⚖️

§ 356a BGB comes into force on June 19, 2026 – Fines up to €50,000 or 4% annual turnover

---Days
--Std
--Min

Withdrawal verified – not just claimed

Only revocation button plugin on the German market with genuine § 312g para. 2 BGB conditional item handling

5
Plugins
Verified
ThemeComplete, WC Add-Ons, YITH, WC Extra, Uni CPO
22
Compat-
Tests
Positive & negative cases against real meta structures
150
Smoke-
tests
Edge cases: empty arrays, serialized PHP, JSON, multi-select
7
Right-
Basics
Pre-configured for objection: §§ 312g, 355, 356 BGB
🎯 Lifetime license
49 € one-time per domain · lifetime license
✓ All updates included✓ All Features✓ No Follow-up Costs✓ 1 domain per license
📰

Comprehensive background article: Everything you need to know about the electronic withdrawal button 2026, the EU directive, and the obligations for online shops. → Read information article now

Video Demos

The plugin in action with presentation and demo

On the left the current video, next to it the previous presentations & demos. We already developed the first version in February 2026!

Legal basis

What § 356a BGB requires from your shop

EU Directive 2023/2673 is being transposed into German law. From 19 June 2026, all online shops must provide an electronic withdrawal button. → All details in the info article

Two-Step Process

Stage 1: "Withdraw contract" – Stage 2: Confirmation page with identification and "Confirm withdrawal". No single-stage process permitted.

§ 356a Sect. 1–3 BGB
📧

Immediate receipt confirmation

Email with date, time and content of the revocation on a permanent data carrier – ideally as a PDF attachment.

§ 356a Para. 4 BGB
🌐

Accessible from every page

The button must be prominently placed and accessible from every subpage without login – via footer link or floating button.

§ 356a Abs. 1 S. 3 BGB
💰

Penalties for Violations

Administrative offences: up to €50,000 or 4% of annual turnover. Enforcement by the Federal Office of Justice and consumer protection associations.

§ 7 UWG-E in conjunction with § 356a BGB
🚫

Exceptions for custom-made products

Special orders, perishable goods, and unsealed software are exempt from the right of withdrawal. The withdrawal button must automatically recognize these products and clearly inform the customer.

§ 312g Para. 2 BGB
🧩

Partial revocation for mixed orders

If an order contains both revocable and excluded products, the shop must provide clear separation. Customers must be able to revoke individual items specifically.

§ 356a para. 2 in conjunction with § 312g para. 2 BGB
Withdrawal Flow

How revocation works in your shop

1

Customer clicks "Revoke contract"

Button in order overview, order details, email footer or as a floating button on every page.

2

Confirmation page with details

Order overview, item list, revocation reason selection and "Confirm revocation" button. Personalized items are detected.

3

Automatic Confirmation

Email with PDF attachment (permanent data carrier), order note with reference. Status: 🔵 Received.

4

Team processes in workflow

Status buttons in the order overview: In progress → Refunded → Completed. Audit trail documents every step.

⚙️ Processing Workflow

Received Revocations in Order Overview

Colored status badge per order, filter dropdown, editing buttons in the order edit view and audit trail secure against revision via WooCommerce order notes. And the customer sees their processing status transparently in their own account.

📊

Column + Filter

Colored status badge in the order overview, sortable. Filter dropdown: all statuses / received only / processing only / refunded only / dispute only.

🔘

Status Buttons

Workflow section with permitted follow-up statuses. Defensive state machine — only meaningful transitions possible.

📝

Audit Trail

Each status change as a WooCommerce order note — who, when, from which status to which. In case of withdrawal, additionally with legal basis.

👁️

Customer Transparency

The current status is displayed to the customer in their order details in an understandable manner. In case of objection, they see the legal basis and justification — deliberately worded as "objected", not "rejected".

⚠️

Objection (optional)

Standard disabled. When activated: legal basis via dropdown from 7 pre-configured options (no error-prone free text), mandatory justification, automatic customer email with VSBG notice.

🔍

Column filter & sorting

Filter and sort order overview by withdrawal status — HPOS-compatible via WooCommerce order list hooks and classic simultaneously.

📧

Status email to customers

Optionally send a notification to the customer with every status change — in WooCommerce standard design, clear and without legal boilerplate.

📦

Couple order status optionally

Optionally automatically set to "Cancelled" or "On-Hold" after return. Default: unchanged — protection against premature refund triggers in Lexoffice/sevDesk.

⚖️ Legal Clarification: Under § 355 BGB, withdrawal is a unilateral declaration by the customer and takes effect immediately. No shop can "reject" it. What is possible: to object to a timely withdrawal if a legal exception applies. This function is therefore disabled by default.

Features

Everything your shop needs

🔄

Two-Step Flow

Legally compliant two-step process: "Revoke contract" → Confirmation → "Confirm revocation". AJAX modal or page flow.

📄

PDF Confirmation

Automatically generated PDF as permanent data carrier. Native PHP, multi-page, with filter vcw_generate_pdf expandable.

📧

WooCommerce Email

Confirmation of receipt in WooCommerce standard design with shop branding. PDF as attachment, CC/BCC, body or footer configurable. Every dispatch is verified via order note — even a failure (e.g. SMTP error) is documented in a revision-secure manner.

🎯

5 Placements

Order details, order list, email, footer link and floating button – individually configurable with icon and text.

🎨

Product type detection

Automatic detection per order item: plugin pattern, universal marker, or word component. 5 plugins verified + exception whitelist.

⚙️

Processing workflow

Column + filter in the order overview. Status buttons (Received → In Progress → Refunded → Completed). Audit trail via order notes.

👁️

Customer status display

The customer sees the processing status of their withdrawal directly in the customer account — received, in progress, refunded, completed. In case of objection including legal basis and justification. Fewer "Where is my withdrawal?" inquiries.

🧩

Mixed Orders & Partial Withdrawal

Automatic separation of revocable and excluded products. Optional: "Request partial revocation" button with logged order note.

🚫

Product Exclusions

Exclude categories or tags via multi-select, or per product via metabox. Recommendation box with legal notice (§ 312g para. 2 BGB).

📊

Revocation reasons

Configurable dropdown: standard reasons editable, add custom reasons, drag & drop for order, individually activatable.

📅

Configurable withdrawal period

Standard: 14 days pursuant to § 355 BGB. Freely adjustable between 7 and 60 days, plus configurable start point.

📋

Logging & Audit

Database logging, CSV export, IP/user agent (optional), storage duration configurable, cron cleanup.

Compliance checklist

Automatic verification of all legal requirements. Compliance score with warning. Each point linked to the setting.

Accessible (WCAG 2.1 AA)

Focus trap in modal, keyboard navigation, visible focus outline, screen reader support (role="alert",aria-labelledby) and prefers-reduced-motion. Built-in — BFSG-ready.

Caching & CDN-safe

Automatic detection of 13 caching systems (NitroPack, WP Rocket, LiteSpeed, Cloudflare and many more) including notification with the specific exclusion URLs of your installation. Nonce refresh prevents 403 errors on cached pages.

🔑

Auto-Updates via License Server

Activate the license once — updates appear automatically. Includes update diagnostics: "Check for updates now" shows transparently whether a new version is available. No more manual ZIP uploads.

🛡️

Rate-Limiting & Security

GDPR-compliant IP hash. Nonce checks, capability verification, escaping. PDF hardening with realpath(). CSV whitespace protection.

🔢

Sequential Order Numbers

Automatic detection from WebToffee, YITH and German Market — each match is verified via two render paths before it is accepted. Reliable even in guest lookup.

✉️

Test email & email customizer

"Send test email" button for quick verification. Shortcode [vcw_widerruf_link] for YayMail & custom email templates — deep-links guest customers without login directly to confirmation.

🌍

WPML & Polylang

i18n support with .pot file. Detection at item-meta level, independent of translations.

🧱

Page Builder Ready

Elementor widget, Gutenberg block, WP widget, and three shortcodes — including button-only mode for footer, imprint, or custom info pages. Styles load automatically in widgets and theme templates.

Performance

Transient caching (15 minutes for detection), assets only as needed, no N+1 queries, autoloader. Minimal footprint.

🎨

Custom button colors

Text, background, and border color via color picker — each with its own hover state. Plus border width, corner radius, and font size. Reliably asserts itself against any theme, completely without CSS knowledge.

📱

Responsive & Customizable

3 button styles + completely custom colors (incl. hover), custom CSS classes for theme integration (e.g. elementor-button), custom CSS field, icon selection, margin crosshair. Mobile-optimized.

👁️

Live Preview in Admin

Shows at the click of a button how many items from the last 30 days would be recognized as personalized. Configure without risk – transparent per item which strategy matched.

🩺

Diagnosis & live lookup test

Dedicated diagnostics tab simulates the complete guest form workflow including email verification. Narrow down lookup issues with sequential order plugins without server logs.

🌐

Multilingualism & country control

Add-on for TranslatePress, WPML & GTranslate: Show or hide right of withdrawal per language, including WPML + GTranslate combination mode. Full control over which market sees which button.

🌐 Multilingual shop? → Language control add-on for TranslatePress, WPML & GTranslate

✅ Legal & checklist

Compliance Validation

The plugin automatically checks all legal requirements based on your settings and displays the current compliance score. Each open point links directly to the setting.

Plugin activatedRevocation button is active and functional
Two-stage procedure§ 356a Abs. 1–3 BGB – Stage 1 + confirmation page
Label level 1"Revoke contract" – § 356a para. 1 sent. 2 BGB
Label level 2"Confirm revocation" – § 356a para. 3 BGB
At least one placementOrder details, list, email, footer or floating
Prominent placementFooter link and/or floating button – § 356a Abs. 1 S. 3
Accessible from every subpageFooter or floating – accessible across all pages
Accessible without loginOLG Köln Az. 6 U 62/24 – No login required
Identification detailsName, contract identification, communication method
Confirmation of receiptEmail + PDF on permanent data carrier – § 356a Abs. 4
Shipping proof of confirmationSuccess & failure of email dispatch documented per order note
Logging & Burden of ProofDB logging, order note, order meta – GDPR Art. 5 para. 2
Reference to revocation noticeArt. 246a § 1 Abs. 2 EGBGB – automatic page detection
Data protection / GDPRMinimal data collection, IP/UA optional, retention period
No dark patternsEU Directive 2023/2673 – objective, straightforward flow
Deadline compliance through dispatchDispatch time is saved – § 356a Abs. 5 BGB
Partial withdrawal optionIndividual orders selectable – § 356a para. 2 BGB
Sanctions documentedUp to €50,000 – § 7 UWG-E in conjunction with § 356a BGB
Product exclusions configured§ 312g para. 2 BGB – custom-made goods correctly excluded
Product type detection activeCustom field plugin detected, detection enabled
Accessibility activeWCAG 2.1 AA / BFSG – focus management, keyboard, screen reader
🎨 Product Type Detection

Automatically recognize personalized products

The same T-shirt is a custom-made item with engraving (§ 312g para. 2 no. 1 BGB) and without engraving it is normal withdrawal merchandise. The plugin recognizes this per order item automatically — regardless of which custom field plugin is used.

🔌

Plugin pattern match

Meta-Key Patterns with Wildcard (_addon_*,_tmcartepo,_ywapo_*"). One-click presets for 5 popular plugins.

🎯

Universal marker

CSS Class or ID widerrufausschluss on a configurator option. Works with any custom field plugin.

🔤

Word component match

Keywords such as gravur,foto,upload in the option name. Min. 3 characters, duplicate protection, max. 100 keywords.

Exception Whitelist

Exclude certain meta keys from detection: gift wrapping, express shipping, and other add-ons that are not custom-made items.

📋 Verified plugins with one-click presets

ThemeComplete WPC EPOWC Product Add-OnsYITH Advanced Product OptionsWC Extra Custom Product OptionsUni CPO

Verified against real meta structures with 22-point test suite. Native arrays, serialized PHP strings, JSON strings, multi-select values, photo upload URLs — all edge cases covered.

⚖️ Legally secured: § 312g para. 2 no. 1 BGB

✓ Engraving with name → Custom-made product✗ Standard variant "blue / L" → revocable ✓ Photo upload for printing → custom production✗ Gift wrapping → revocable ✓ Individual lens strengths → custom manufacturing✗ Express Shipping → Withdrawable ✓ Configured furniture/CNC → Custom manufacturing✗ Color selection without production → revocable
Backend

14 configuration tabs for full control

Every aspect is configurable – from button text to colors to log retention duration. Changes take effect immediately, tab-aware storage without data loss.

Compliance Score: 94 %
Revocation button active
Global On/Off Switch for the Revocation Button
Enforce Withdrawal Period
Display button only during the configurable revocation period (default: 14 days)
Login required
⚠ § 356a requires access WITHOUT login
Target Audiences

Who is this plugin for?

FOR EVERYONE who wants to work legally sound yet flexibly adapted to their business model – without headaches.

And even more specialized shops are able to use our plugin:

🎁

Personalization shops

Mugs with photos, t-shirts with custom text, wooden signs with engraving. The plugin automatically recognizes which position is personalized — the standard variant next to it remains revocable.

👓

Opticians & Acousticians

According to German Federal Court of Justice (BGH) case law, glasses with individual prescription strength are custom-made items. This is a mandatory case for correct conditional item handling.

🔧

Configurator shops

Configurable tables, custom-tailored components, CNC-manufactured parts. Automatic detection protects against abusive returns.

🛒

Mix-Shops

Standard products and customizable variants in the same shop? Differentiation per order item — automatic partial return for returnable items.

📈

Growing Shops with Team

Coordinate revocations in the team: status buttons, column in order overview, audit trail. Who, when, why — everything documented.

🍇

Perishable goods & digital goods

Perishable goods (§ 312g para. 2 no. 2 BGB) and digital content (§ 356 para. 5 BGB). Withdrawal function with appropriate legal bases.

🏢

You sell to business customers? B2B shops have their own rules for the withdrawal button — when the obligation applies and when it doesn't. → Withdrawal button in B2B shop: what you need to know

Plugin comparison

Why VASTCOB withdrawal button?

Most solutions only cover the statutory basic requirement. The VASTCOB withdrawal button is the only plugin with product type recognition, processing workflow, and verified plugin compatibility.

Function VASTCOB
Revocation button
Simple
Revocation Plugins
Germanized /
German Market
Two-stage flow (§ 356a BGB)partially
PDF entry confirmationpartially
Floating button & footer linkpartially
Compliance checklist
Product type detection (§ 312g para. 2)
Partial revocation for mixed orders
Processing workflow with status
Customer-side status display in account
Audit trail via order notes
Objection function with legal basis
Accessibility (WCAG 2.1 AA, focus management)partially
Caching/CDN compatibility with nonce protection
Rate limiting (GDPR compliant)
HPOS-compatiblepartially
Sequential Order Numbers
Germanized Integrationpartiallycustom solution
German Market integrationcustom solution
Lexoffice / sevDesk compatiblepartially
Email customizer support (YayMail)
Custom Field Plugin Detection (5 verified)
Multilingualism with full control per languagepartially
Auto-Updates via License Serverpartially

As of June 2026 · Information based on publicly documented features of the respective plugins.

🌐 Add-on

Multilingual shop?
Full control per language.

Those selling multilingually don't want to show every revocation path in every language — this add-on does exactly that, across platforms for TranslatePress, WPML and GTranslate.

Language-dependent display

Use a checkbox to specify in which languages the button appears — all other languages are automatically hidden. Applies to every display area: footer link, floating button, shortcode, Gutenberg block, Elementor & WP widget, order details and order list.

🔌

Three Plugins Supported

TranslatePress, WPML and GTranslate (Free and SEO/URL mode). Auto-detection with notification: Multiple active language systems are detected, the settings page points to the correct mode selection.

🔀

Combo Mode

WPML + GTranslate in parallel — for shops with manually translated main languages (WPML) and automatically translated additional languages (GTranslate). A use case that no other plugin covers.

🛡️

Fail-open & optional locks

If nothing is configured, the button remains visible everywhere (fail-open). The withdrawal page remains accessible via direct link — only the buttons are hidden. Optional: Also lock endpoint and filter email link by order language (WPML).

TranslatePress WPML GTranslate WPML + GTranslate combination

Independent add-on · no interference with the plugin core · set up in a few clicks · can be deactivated at any time

⚖️ Note on personal responsibility: § 356a BGB requires a prominent, easily accessible placement of the withdrawal button. If you hide the button for a language, you as the shop operator are deciding that consumers addressed in that language do not require a legally mandated electronic withdrawal option. This assessment is your responsibility — the add-on merely provides the tool.

Compatibility

Works with your setup

🇩🇪 German Shop Plugins

WooCommerce GermanizedGerman MarketWooCommerce HPOSWooCommerce Blocks

🎨 Custom field plugins (verified)

ThemeComplete WPC EPOWC Product Add-OnsYITH APOWC Extra Custom Product OptionsUni CPO+ every plugin via universal marker

🧾 Accounting Plugins

LexofficesevDeskBillbeeNo Early Refund Trigger

⚡ Caching & CDN

NitroPackWP RocketLiteSpeed CacheW3 Total CacheWP Super CacheWP Fastest CacheAutoptimizeHummingbirdSG OptimizerBreezeCache EnablerSwift PerformanceCloudflareAuto-Detection + Nonce Refresh against 403 Errors

🔢 Order Numbers

WebToffee Sequential Order NumbersYITH Sequential Order NumberGerman MarketVerified lookup via two render methods

🧱 Page Builder

ElementorWPBakeryDivi BuilderBeaver BuilderBricksOxygenBreakdancingGutenberg

🎨 Themes

BeThemeAvadaWoodMartFlatsomeOceanWPAstraGeneratePressflavorSnow… and many more

✉️ Email customizer

YayMailWooCommerce standard emailsShortcode [vcw_widerruf_link] for each template

🌍 Multilingualism

WPMLPolylang.pot Translation File

🔍 SEO Plugins

Yoast SEORank MathAIOSEOSEOPress

… compatible with everything.

Frequently Asked Questions

FAQ on the revocation button

Must I have integrated the revocation button by 19.06.2026?
Yes. § 356a BGB comes into force on June 19, 2026. Violations threaten fines of up to €50,000 or 4% of annual turnover. You can find all details in the detailed information article.
What does the plugin cost?
€49 one-time per domain – lifetime license with all updates and features included. No follow-up costs, no free version. Updates via integrated license server.
Does product type detection work with my custom field plugin?
Yes. One-click presets for 5 verified plugins (ThemeComplete WPC EPO, WC Product Add-Ons, YITH APO, WC Extra, Uni CPO). The universal marker (widerrufausschluss) works with every plugin. Word component recognition detects keywords such as "engraving", "photo", "upload" in the field label.
Is the plugin accessible (BFSG / WCAG)?
Yes. Modals and forms meet the requirements of WCAG 2.1 AA: focus trap and focus management in the modal, complete keyboard operability, visible focus outline (optionally enhanced), screen reader attributes (role="alert",aria-labelledby) and support for prefers-reduced-motionThis ensures the withdrawal flow complies with the requirements of the Accessibility Strengthening Act (BFSG), which has been in effect for online shops since June 2025.
Can my customer see the processing status of their withdrawal?
Yes. In the order details in the customer account, after a withdrawal has been submitted, the current status is displayed clearly: received, in processing, refunded, or completed. If the withdrawal was objected to, the customer sees the legal basis and justification. This creates transparency and reduces support inquiries.
Does the plugin work with YayMail or other email customizers?
Yes. With the shortcode [vcw_widerruf_link] You insert the revocation link at any location in your email template — also in the YayMail builder. The link functions as a deep link with order key, so guest customers without an account can also reach the revocation confirmation directly. Note: In the YayMail live preview, foreign shortcodes appear as raw text on principle — what matters is a real test email.
I use HPOS. Does the order overview column work?
Yes, both variants are supported in parallel — HPOS via woocommerce_shop_order_list_table_*-Hooks and classic. Filters and columns work identically in both.
What happens to orders that submitted a revocation before the update?
These orders automatically appear as "Received" — no migration required, no SQL scripts. As soon as you manually set a status, it is explicitly saved.
Can I have the objection button disabled?
Yes, that's even the default. Workflow tracking is immediately active and can be used without legal risk. The objection function is optional and should only be used with justification.
Does the plugin work with my theme and page builder?
Compatible with all common themes (BeTheme, Avada, WoodMart, Flatsome, Astra and many more) and page builders (Elementor, WPBakery, Divi, Beaver Builder, Bricks, Oxygen, Breakdance). Elementor widget, Gutenberg block, WP widget and shortcode [vcw_widerrufsbutton]. Additionally available: [vcw_widerrufsbutton mode="button"] for pure button placement without form as well as custom CSS class fields for seamless theme integration. Even with active caching plugins (NitroPack, WP Rocket and others), the withdrawal flow remains functional through automatic nonce refresh.
What happens to the order after a revocation?
An order note is created with reference number, date, and reason. The order status remains unchanged by default (protection against premature refunds in Lexoffice/sevDesk). Status change can be optionally enabled. The new processing workflow displays the status directly in the order overview.
Is the plugin GDPR compliant?
Data minimization: IP addresses and user agents only on request. Log storage duration configurable (§ 147 AO). Rate limiting with GDPR-compliant IP hash. Nonce checks, escaping, sanitize_text_field, $wpdb→prepare.
Does the Plugin Work with WPML or Polylang?
Yes. Recognition works at the item meta level, independent of translations. Category/tag exclusions automatically take WPML/Polylang term translations into account. AJAX URLs resolved correctly in multiple languages.
Can I audit the source code myself?
The entire code is organized according to WordPress coding standards, with docblock comments in German. Over 138 smoke test scenarios documented. Security and compliance report available upon request.
Does voice control work with my multilingual plugin?
Yes, provided you use TranslatePress, WPML, or the GTranslate plugin. Multiple systems simultaneously are covered in combo mode "WPML + GTranslate parallel".
Does the revocation page disappear completely with hidden languages?
Not by default — only the buttons are hidden (fail-open principle). Optionally, the revocation page (endpoint) can also be blocked in the deselected languages.
Does the voice control add-on interfere with the main plugin?
No. It is a standalone plugin that controls the display and can be deactivated at any time without traces. No code in the main plugin is modified.
Where can I find more information about the legal change?
You can find a comprehensive background article here: The electronic withdrawal button 2026 – What online shops need to know now.
Secure now

Legally Compliant from Day One

Install the revocation button and comply with § 356a BGB – with automatic product type detection and end-to-end workflow.

One-time 49 € per domain · Lifetime license · All updates included

Existing customers: Update via the standard WordPress update mechanism
New customers: Purchase license → Install plugin → Configured in under 15 minutes

WordPress 6.0+ · WooCommerce 7.0+ · PHP 7.4+

WooCommerce withdrawal button plugin compliant with § 356a BGB

The WooCommerce Revocation Button Plugin from VASTCOB fully implements § 356a BGB without you having to modify your shop's code. The two-stage flow, the immediate PDF receipt confirmation, and prominent access from every page are available immediately after activation. The plugin thus provides everything that EU Directive 2023/2673 and the German legislator require from June 2026 onwards.

Specifically, this means that level 1 labeled "Revoke Contract" and level 2 labeled "Confirm Revocation" exactly follow the requirements of § 356a para. 1 to 3 BGB. The identification details are automatically displayed in the confirmation step, so no separate programming is necessary. The plugin integrates seamlessly into the WooCommerce My Account structure.

Accessibility without login is ensured via a permanent footer link and an optional floating button. Both comply with the requirement from § 356a para. 1 sentence 3 BGB as well as the ruling of the OLG Cologne with case number 6 U 62/24. This way you meet the requirement for prominent placement and can reliably avoid fines.

WordPress revocation button mandatory from June 19, 2026

As of June 19, 2026, the WordPress Revocation Button becomes a legal requirement for every online shop that concludes consumer contracts for goods, digital content, or digital services. The background is the implementation of EU Directive 2023/2673 into German law via § 356a BGB. By this date, shops must have fully implemented the required functionality.

In case of missing or faulty implementation, administrative offenses threaten with fines up to 50,000 euros or alternatively four percent of annual turnover. The requirement is enforced by the Federal Office of Justice as well as consumer protection associations, which can issue cease-and-desist letters. The effort for subsequent correction can quickly exceed the value of a timely plugin license many times over.

Timely implementation creates legal certainty and prevents stress shortly before the deadline. From June 2026 at the latest, the withdrawal button in the shop will be a mandatory element, similar to today's imprint, withdrawal policy, and privacy policy — purchase license, install plugin, configured in under 15 minutes.

License for 49 euros one-time per domain

The license for the Widerrufsbutton plugin costs 49 euros as a one-time fee per domain — lifetime use including all future updates and feature enhancements. A free version is not available; all features are included in the single available license. One license is required per domain, so multi-shop operators must purchase a separate license per installation. Updates are automatically deployed via the integrated license SDK.

Compared to potential fines of up to 50,000 euros or individual development of functionality, the license fee is negligible. The technical requirements are deliberately kept low and include WordPress 6.0 or higher, WooCommerce 7.0 or higher, and PHP 7.4 or newer. This means the Widerrufsbutton WordPress is compatible with practically every current shop installation and ready for immediate use.

Configurable revocation reasons and audit logging in the plugin

The plugin comes with a configurable selection of withdrawal reasons. Standard reasons such as "Item does not match the description," "Item arrived damaged," or "I changed my mind" are prepared and can be freely reformulated or reordered via drag and drop. You can add your own reasons in seconds via the admin interface.

Every submitted withdrawal is logged in its own database table. The Widerrufsbutton WooCommerce plugin captures order number, date, time, customer email address, reference number, status, and the selected reason. If desired, IP address and user agent are also stored, which is disabled by default for data protection reasons. The storage duration is configured centrally, with reference to § 147 AO and retention periods.

A CSV export makes the audit list available with one click, for example for internal reporting or handover to a tax advisor. The table displays ten, twenty, fifty, or one hundred entries per page. Via a cron job, older entries are automatically removed after the configured retention period, keeping the database lean and GDPR-compliant.

Revocation button WooCommerce with PDF and audit trail

The Revocation Button WooCommerce automatically creates a PDF document in the background as a permanent data carrier, as required by § 356a para. 4 BGB. This PDF contains the date, time, content of the revocation, order number, reference number, and item overview. It is sent to the customer by email and made available in parallel in the shop backend for download.

PDF generation is performed natively in PHP without external libraries such as TCPDF, FPDI, or Dompdf. This keeps the plugin footprint minimal, avoids dependencies, and reduces load times. The only limitation concerns special characters, which are converted to ASCII, for example ä to ae. For CJK languages, the use of a separate library is recommended.

In parallel with the receipt confirmation, the entire process is documented as an audit trail. In the backend, you will find a timestamp for each revocation, a unique reference number, the order reference, the selected reason, and the status. WooCommerce automatically generates an order note with the reference number and optionally notifies you by email. The order status remains unchanged by default — a deliberate protection against premature refund triggers in accounting integrations such as Lexoffice or sevDesk. If desired, an automatic status change (e.g. to "Cancelled" or "On-Hold") can be activated in the settings. Additionally, since version 1.2.4, every email dispatch is verified: both successful and failed receipt confirmations are recorded as order notes in the order. This ensures that the burden of proof under GDPR Art. 5 para. 2 is fully secured.

Accessible, cache-safe and transparent for customers

Since version 1.2.1, the withdrawal flow meets WCAG 2.1 AA requirements: focus trap and focus management in the modal, complete keyboard operability, visible focus outline, screen reader attributes, and support for prefers-reduced-motion. This aligns the plugin with the requirements of the Accessibility Enhancement Act (BFSG), which has applied to online shops since June 2025 — an aspect that many withdrawal solutions completely ignore.

The interaction with performance optimization is also solved: The plugin automatically recognizes 13 common caching systems from NitroPack via WP Rocket and LiteSpeed Cache to Cloudflare and displays a notice in the backend with the specific exclusion URLs of your installation. An automatic nonce refresh prevents the notorious 403 errors that would otherwise occur on cached pages after the nonce validity expires. The withdrawal button thus works reliably even in highly optimized shops with CDN.

For the customer page, the plugin provides transparent status display: After a withdrawal is submitted, the customer sees the processing status directly in their order details — received, in progress, refunded, or completed. If the withdrawal was disputed, the legal basis and justification are displayed. This reduces support inquiries and builds trust. The feature set is rounded out by completely custom button colors including hover states, three frontend shortcodes (form, pure button, email deep link), and YayMail support for custom email templates.

Product Type Detection for Individual Products

With automatic product type detection, the plugin solves a problem that no WooCommerce revocation plugin has addressed so far: distinguishing between standard goods and custom-made items per order line item. A T-shirt without engraving is normal revocable goods under § 355 BGB, but with the engraving "Hans Müller" it is a custom-made item that is excluded from the right of revocation under § 312g para. 2 no. 1 BGB.

Three detection strategies are available: plugin pattern matching with wildcard support for meta keys of known custom field plugins, a universal marker via CSS class for any configurators, and word component recognition for keywords in the option name. An exception whitelist allows you to specifically exclude non-custom items such as gift wrapping or express shipping. All strategies can be freely combined and work with a 15-minute transient cache for optimal performance.

Compatibility was verified against real meta structures from five popular plugins in a 22-point test suite: ThemeComplete WPC Extra Product Options, WooCommerce Product Add-Ons, YITH Advanced Product Options, WC Extra Custom Product Options, and Uni CPO. Edge cases such as empty optional sub-arrays, serialized PHP strings with empty content, and mixed multi-select values are fully covered.

Editing workflow for received revocations

The new processing workflow supplements the plugin with a colored status column in the WooCommerce order overview. Each order with a received revocation immediately shows the current processing status: Received, In Progress, Refunded, Objection Raised, or Completed. A filter dropdown allows quick narrowing down to specific status values.

In the individual order view, status buttons are available that only allow the respective sensible follow-up statuses — a defensive state machine prevents inconsistent transitions. Every status change is immutably documented as a WooCommerce order note: who set which status when, and in case of dispute additionally with which legal basis and justification. This creates a complete audit trail suitable for regulated industries and GoBD requirements.

⚖️ Important: No legal advice, clear distribution of responsibility

The VASTCOB Widerrufsbutton plugin supports the technical implementation of legal requirements for the electronic withdrawal button (§ 356a BGB) and the exclusion logic for custom-made items (§ 312g para. 2 BGB). It provides: technically correct implementation, automatic detection of personalized order items, structured processing workflow with audit trail, and preconfigured legal basis options.

Your responsibility as a merchant includes: The legal classification of your custom fields, the correct configuration of exclusions, for personalized products the documentability of customer specifications in case of dispute, and in case of objection the justifiability of the chosen legal basis.

The plugin does not replace legal advice from an attorney. In case of uncertainty, we recommend consulting a specialist lawyer for IT law.

Status: June 2026 — this page is updated regularly.

Further information: Info article on the withdrawal button 2026 · Buy plugin

€49 one-time· Lifetime license · Product type detection + workflow