WooCommerce Herroepingsfunctie (NL) WP Registry grade A. No security issues foundWP RegistryNo security issues foundOpen the reportA
WooCommerce Herroepingsfunctie plugin
Install
Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/aronprins/wc-herroepingsfunctie/releases/download/v1.1.6/wc-herroepingsfunctie-1.1.6.zipWooCommerce compliance plugin for a public online withdrawal flow and a digital checkout waiver for immediate digital delivery.
What It Does
- Adds a public
[herroepingsfunctie]shortcode. - Adds a "Herroepen" endpoint under WooCommerce My Account.
- Lets customers look up an order by order number and billing email.
- Supports partial withdrawal per order line.
- Uses a two-step confirmation flow.
- Sends an email receipt with the submitted withdrawal statement and timestamp.
- Stores withdrawal records in a dedicated table.
- Adds a WooCommerce admin overview for received withdrawals.
- Supports optional excluded categories/product IDs and optional IP logging.
- Supports WooCommerce HPOS.
- Adds a digital checkout waiver for virtual/downloadable-only carts.
- Supports classic checkout and the WooCommerce Checkout Block.
- Scopes the digital checkout waiver to configured billing countries, defaulting to EU + EEA.
- Bundles WordPress
.po/.molanguage files for EU official languages, EEA languages, and English.
Legal Scope
This plugin is provided as-is as a technical implementation aid and does not replace legal advice. Review all legal copy, product exclusions, country scope, checkout waiver text, and translations with counsel before production use.
The digital checkout waiver defaults to EU + EEA billing countries:
AT, BE, BG, HR, CY, CZ, DK, EE, FI, FR, DE, GR, HU, IE, IT, LV, LT, LU, MT, NL, PL, PT, RO, SK, SI, ES, SE, IS, LI, NO
Unknown billing country is fail-closed by default: the waiver remains visible/required until a non-scoped country is selected.
Requirements
- WordPress 6.5+
- PHP 7.4+
- WooCommerce
- Tested locally with WordPress 7.0 and WooCommerce 8.8.2
Installation
- Install and activate WooCommerce.
- Upload and activate this plugin.
- Go to
WooCommerce > Herroeping instellingen. - Configure legal copy, excluded categories/products, email subject, optional IP logging, and checkout waiver settings.
- Create a public page such as "Herroepen / Annuleren".
- Add the shortcode:
[herroepingsfunctie]
- Link the page from the footer, account area, or customer service pages.
- Visit
Settings > Permalinksand save once to flush rewrite rules.
Checkout Waiver
The checkout waiver is required only when all of these are true:
- Waiver is enabled in settings.
- Cart contains only virtual/downloadable products.
- Billing country is in the configured country list.
For WooCommerce Checkout Block, the JavaScript controller mirrors the server-side rule by hiding/disabling the checkbox and restoring the default place-order label when the country is out of scope. Server-side validation remains authoritative.
Languages
The plugin uses the wc-herroepingsfunctie textdomain and includes language files for:
bg_BG, cs_CZ, da_DK, de_DE, el, en_GB, en_US, es_ES, et, fi, fr_FR, ga_IE, hr, hu_HU, is_IS, it_IT, lt_LT, lv, mt_MT, nb_NO, nl_NL, pl_PL, pt_PT, ro_RO, sk_SK, sl_SI, sv_SE
Regional fallbacks are included for common European locales, for example:
nl_BE -> nl_NLfr_BE -> fr_FRde_AT -> de_DEit_CH -> it_IT
Default setting values are translated while they still match the built-in defaults. Merchant-edited legal text is preserved and not silently machine-translated. The settings page also lets merchants load any bundled default translation into the editable text fields for review and adjustment before saving.
The bundled translations are machine-assisted drafts. Review them before production use.
Repository Files
wc-herroepingsfunctie.php- plugin bootstrap, constants, includes, and initialization.includes/- focused PHP modules for updater, settings, checkout waiver, public withdrawal flow, admin screens, order helpers, and mail handling.assets/js/checkout-blocks.js- Checkout Block waiver UI controller.assets/js/admin-settings.js- admin settings helper for previewing bundled default translations.languages/- bundled POT/PO/MO files.readme.txt- WordPress.org-compatible plugin readme.README.md- GitHub-facing documentation.herroepingsrecht-wetgeving-compliance.md- implementation/legal mapping notes.AGENTS.md- development ethos and verification checklist.
Development Checks
Run the relevant subset before committing:
php -l wc-herroepingsfunctie.php
find includes -name '*.php' -print -exec php -l {} \;
php tests/github-release-updater-test.php
node --check assets/js/admin-settings.js
node --check assets/js/checkout-blocks.js
git diff --check
for f in languages/*.po; do msgfmt -c -o /tmp/check.mo "$f" || exit 1; done; rm -f /tmp/check.mo
For checkout behavior changes, verify against a live WooCommerce install with both an EU/EEA billing country and a non-scoped billing country.
GitHub Releases
The repository includes a lean GitHub Actions workflow at .github/workflows/release.yml.
GitHub Releases are the distribution channel for installable ZIPs. A persistent local /releases/ folder is not needed; release archives should be generated by the workflow or as temporary files during backfills.
The plugin also registers WordPress update metadata for the GitHub Releases channel. WordPress checks the latest published non-prerelease GitHub Release, looks for the exact workflow-built asset name wc-herroepingsfunctie-<version>.zip, and offers that ZIP through the normal wp-admin plugin update flow when the release version is newer than WCH_VERSION.
The updater is intentionally fail-closed:
- draft and prerelease GitHub Releases are ignored;
- releases without the exact installable ZIP asset are ignored;
- non-GitHub asset URLs are ignored;
- automatic updates are not forced by the plugin; WordPress/site-owner settings remain authoritative.
On every v* tag push, it:
- checks out the repository;
- installs
gettext,zip, andunzip; - validates PHP, the GitHub release updater test, JavaScript, whitespace, and
.potranslation files; - checks that the plugin header
Version,WCH_VERSION,readme.txtStable tag, and Git tag all match; - builds an installable ZIP named
wc-herroepingsfunctie-<version>.zip; - uploads the ZIP as a workflow artifact;
- creates or updates a GitHub Release and attaches the ZIP.
To publish a release:
git status --short
git tag v1.1.6
git push origin v1.1.6
Users can download wc-herroepingsfunctie-<version>.zip from the GitHub Release and install it directly through Plugins > Add New > Upload Plugin in WordPress.
Sites with this plugin installed can also receive update notices from the same GitHub Release asset in Dashboard > Updates and Plugins.
Manual workflow runs are supported too. They validate and build the ZIP as an Actions artifact, but they only create a GitHub Release when the workflow runs from a pushed v* tag.
Testing The Updater
Run the offline updater test:
php tests/github-release-updater-test.php
For staging verification inside WordPress without publishing a real release, add a temporary mu-plugin that filters wch_github_release_updater_response and returns a fake future GitHub Release payload with an exact wc-herroepingsfunctie-<version>.zip asset URL. Then delete the update_plugins site transient or visit Dashboard > Updates to force WordPress to check again. Remove the mu-plugin after testing.
Changelog
Unreleased
1.1.6
- Updated plugin author metadata and public plugin URL to Aron & Sharon.
1.1.5
- Cleared the GitHub release metadata cache when an authorized admin uses WordPress' forced update check.
1.1.4
- Added a settings-page dropdown for loading bundled translated defaults into editable text fields before saving.
- Preserved explicitly selected bundled default translations when they match the raw built-in defaults.
1.1.3
- Added a built-in WordPress updater that uses published GitHub Release ZIP assets.
- Added an offline PHP test harness for updater release parsing and safety checks.
- Added WordPress textdomain loading.
- Added bundled
.poand.motranslation files for EU-official languages, EEA languages, and English. - Added regional locale fallback for common European WordPress locales.
- Localized default setting values while preserving merchant-edited legal copy.
- Added WordPress.org-compatible
readme.txt. - Added this GitHub
README.md. - Added GitHub Actions release workflow for installable ZIPs.
- Added an explicit as-is legal disclaimer to the settings screen and documentation.
1.1.2
- Scoped the digital checkout waiver to configured billing countries, defaulting to EU + EEA.
- Added fail-closed handling for unknown billing country.
- Updated Checkout Block behavior to hide/show the waiver and button label based on billing country.
1.1.1
- Added support for WooCommerce 8.8 Checkout Block waiver behavior.
1.1.0
- Added digital withdrawal waiver checkout flow.
1.0.0
- Initial online withdrawal function with shortcode, account endpoint, email confirmation, and admin log.
License
GPL-2.0-or-later.
Releases
8 releases. Each count is every asset in that release; expand a row for the breakdown.