Description
Ångerrätt SE for WooCommerce gives Swedish WooCommerce stores a complete, self-service workflow for the statutory right of withdrawal under the Distance Contracts Act (distansavtalslagen).
A dedicated withdrawal page lets the customer:
- Enter their email address and receive a one-time verification code (OTP).
- Verify their identity by entering the code.
- Select an eligible order from the last 30 days and submit the withdrawal request.
When a request is submitted, the plugin records it, sets a dedicated order status, sends the customer a confirmation email (a legal receipt) and notifies the store. All emails use the standard WooCommerce email template so they match the rest of your store’s messaging.
Key features
- Dedicated withdrawal page (
/angra-kop/) created automatically on activation. - Customer verification via a one-time code (OTP) sent to the order’s email address — no login required. Works for both registered users and guests.
- Extensive exclusion options for custom-made products where the right of withdrawal does not apply. Exclusions can be set by tag, product category or individual products.
- Timestamped confirmation email sent automatically to the customer, listing products, price and shipping cost — serves as a legal acknowledgement of receipt.
- Admin notification on every withdrawal request, with a direct link to the order.
- Automatic order status update in the WooCommerce order view.
- Right-of-withdrawal information shown at checkout and on the order confirmation page.
- Configurable time limit as fallback. Manual control of the exact delivery date. A carrier API integration that fetches the delivery date is available as an upgrade.
- Contact details from the admin panel printed automatically on all pages in the withdrawal flow.
- Two display modes — Hook (WooCommerce standard) or Floating tab. The floating tab works regardless of theme and page builder, including Klarna Checkout.
- GDPR-friendly — no new customer data is collected; withdrawal data is deleted automatically after a configurable number of months (default 36).
This plugin is built for the Swedish market and its interface texts are in Swedish.
Installation
- Upload the plugin files to the
/wp-content/plugins/angerratt-se-for-woocommercedirectory, or install the plugin through the WordPress Plugins screen directly. - Activate the plugin through the Plugins screen in WordPress.
- A withdrawal page (
/angra-kop/) containing the[ngersefo_angerratt]shortcode is created automatically on activation. - Go to WooCommerce Ångerrätt to configure exclusions, the withdrawal window, contact details and display options.
WooCommerce 10.5.3 or later is required (this includes the security fix for CVE-2026-3589).
FAQ
-
Which page do customers use?
-
On activation the plugin creates a page at
/angra-kop/containing the[ngersefo_angerratt]shortcode. You can move the shortcode to any page you like. -
Does it support guest orders?
-
Yes. Identity is verified with a one-time code sent to the order’s email address, so customers do not need an account.
-
Is partial return supported?
-
Yes. Partial returns are optional and disabled by default — the plugin then registers a full withdrawal of the selected order, exactly as before. When you enable partial returns under WooCommerce Ångerrätt, the customer gets a checkbox in front of each eligible product in the confirmation step and can withdraw only the items they choose. The order total is recalculated to reflect the selected products, and you can choose per store whether the shipping cost is refunded on a partial return.
-
Where is the data stored?
-
Withdrawal requests are stored in a dedicated table in your own WordPress database. Records are removed automatically after the retention period you set in the settings.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Ångerrätt SE for WooCommerce” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Ångerrätt SE for WooCommerce” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.7.10
- Hardening: sanitize the selected-items input on submission, use a
$wpdb->prepare()placeholder for the internal table name, and remove a redundantsuppress_filtersflag. No functional changes.
1.7.9
- Tweak: the two withdrawal tabs in the order list are now told apart — WooCommerce’s built-in status filter is labelled “Ångerbegäran Nya” (orders still awaiting handling) and the new full view is “Ångerbegäran Alla”. Only the tab labels change; the order status itself is unchanged.
1.7.8
- New: a “Ångerbegäran” tab with a counter above the WooCommerce order list shows every order that has ever had a withdrawal request, regardless of its current status (they no longer disappear from view when the status changes). Works with both HPOS and classic order storage.
1.7.7
- Fix: reverted the settings field widths to the simple inline approach that worked in 1.7.3 (25% width) with an added minimum width so they no longer compress on mobile, and a cap so they never overflow the screen. All fields share the same width again.
1.7.6
- Fix: the settings field width rules are now enforced so they reliably win over the active WooCommerce/theme admin styles. In some setups the previous rules were overridden, leaving the fields full width; they now consistently share one capped, responsive width.
1.7.5
- Fix: all settings fields now share one consistent width. Text inputs, textareas and the product/tag selectors are capped at the same maximum (the reference field width) so none is wider than the others, have a minimum width so they stay usable, and never extend past the screen edge on phones. The product category grid also collapses to a single column on small screens.
1.7.4
- Fix: settings fields no longer use a fixed 25% width that collapsed on phones and narrow browser windows. Text inputs and textareas now use the responsive WordPress core classes (regular-text/large-text) and the product/tag selectors fill the available column up to a sensible maximum, so the settings screen is usable on mobile.
1.7.3
- On activation the withdrawal page is always (re)created cleanly: any earlier withdrawal pages (slugs angra-kop, angra-kop-N and woo_angerratt) are permanently deleted first, then a fresh “Ångra ett köp” page with the [ngersefo_angerratt] shortcode is created.
- New: optional partial returns. Enable it under WooCommerce Ångerrätt to let customers select individual products to withdraw via checkboxes in the confirmation step, with the order total recalculated for the selected items.
- New: per-store setting for whether the shipping cost is refunded on a partial return (full returns always refund shipping).
- New: the article number (product SKU, or the WooCommerce product ID as a fallback) is shown under each product name on the withdrawal page and in both the customer and admin emails.
- New: the shipping method name is printed under the shipping line on the withdrawal page and in both emails.
- The withdrawal request now records the return type and shipping handling for traceability.
1.7.2
- OTP verification no longer relies on PHP sessions; it now uses a transient keyed by a one-time token, which is more reliable across caching and hosting setups.
- Output escaping, input unslashing/sanitization and
wp_parse_url()usage brought fully in line with the WordPress coding standards.
1.7.1
- Public release prepared for the WordPress.org directory.
- Removed the external license check and the bundled update mechanism (updates are handled by WordPress.org).
- Internationalization, database and nonce handling reviewed against the WordPress coding standards.
