Skip to content

moghancy/eu-revocation-button

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

70 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EU Revocation Button for WooCommerce

A free, theme-independent contract-revocation button (§ 356a BGB „Widerrufsbutton") for WooCommerce. From 19 June 2026 German online shops are legally required to offer a one-click way for consumers to revoke a purchase contract — this plugin provides it.

Distributed free on the WordPress.org plugin directory and the WooCommerce Marketplace. Built and maintained by Moghancy.

Features

  • Revocation form on any page via the [mocy_revocation_form] shortcode, plus a [mocy_revocation_button] trigger and a Gutenberg block.
  • Two-step flow (submit → confirm) with full or partial, per-item revocation.
  • Order matching by the internal order ID or the customer-facing order number (works with sequential/prefixed numbers such as 2026-1).
  • Configurable deadline: set the period in days, choose the WooCommerce order status it starts from, or set 0 to disable the time limit entirely. A revocation stays possible before the period begins (§ 355 BGB); only an elapsed period closes it.
  • Native WooCommerce emails (confirmation-of-receipt to customer and shop, stating date and time per § 356a Abs. 4 BGB) — no custom mail wrapper, theme-independent.
  • Editable customer-facing texts and error messages from a WooCommerce settings tab.
  • HPOS (High-Performance Order Storage) compatible.
  • i18n: English source with German (de_DE), French (fr_FR) and Spanish (es_ES).
  • Data sovereignty: uninstall removes only the plugin's own settings — revocations recorded on orders are preserved.

Installation

From WordPress.org (once published): search for „EU Revocation Button" under Plugins → Add New, install and activate.

Manual / update: download mocy-revocation.zip, go to Plugins → Add New → Upload Plugin, and choose the file. When updating an existing install, use „Replace current with uploaded" — your settings and order data are kept.

Requirements: WordPress ≥ 6.2, PHP ≥ 7.4, WooCommerce ≥ 8.2.

After activating, place the [mocy_revocation_form] shortcode on a page and configure the period and texts under WooCommerce → Settings → EU Widerrufsbutton.

Development

composer install         # PHP dependencies (dev)
npm install              # frontend dependencies

npm run build            # tsc + vite → build/ (required; not committed)
npm run watch            # rebuild on change

composer lint            # phpcs (WordPress + WooCommerce sniffs)
composer test            # phpunit (Domain logic)
npm run test             # vitest (frontend)

Verify loop before committing: composer lint · composer test · npm run test · PHP 7.4 compatibility (phpcs --standard=PHPCompatibilityWP --runtime-set testVersion 7.4-).

Architecture: PSR-4 Mocy\Revocation\src/; pure domain logic (deadline, matcher, rate limiter, token, validator) under src/Domain/; React/TypeScript frontend in resources/ts/ built to build/. See CLAUDE.md for the full guide.

Building the distributable

The shipped ZIP contains the compiled build/ and excludes dev files via .distignore. Validate it with the WooCommerce QIT CLI and the official Plugin Check:

wp dist-archive . dist/mocy-revocation.zip
vendor/bin/qit woo:validate-zip dist/mocy-revocation.zip
wp plugin check <extracted-dist>          # target: 0 errors / 0 warnings

License & trademark

Copyright © 2026 Amir Moghancy Moghaddam.

The code is free software under GPL-2.0-or-later (see LICENSE): anyone may use, study, modify and redistribute it at no cost. As required by the GPL, the copyright and author notices must be kept intact — you may not strip the authorship and present the code as your own work.

The name “EU Revocation Button”, the “Moghancy” brand, and the associated logos are not covered by the GPL and remain the property of the author. You may not sell or distribute this plugin — modified or not — as your own or a rebranded product, nor use the name or brand in a way that suggests endorsement. In short: the code is free; passing it off as your own software is not permitted.

This is the same model WordPress and WooCommerce themselves use: GPL code, protected name.

About

Free § 356a BGB contract-revocation button (EU-Widerrufsbutton) for WooCommerce — theme-independent, HPOS-compatible, full & partial revocation.

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors