{"id":328192,"date":"2026-07-01T21:46:57","date_gmt":"2026-07-01T21:46:57","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/angerratt-se-for-woocommerce\/"},"modified":"2026-07-02T03:05:00","modified_gmt":"2026-07-02T03:05:00","slug":"angerratt-se-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/angerratt-se-for-woocommerce\/","author":18698586,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.7.10","stable_tag":"1.7.10","tested":"7.0","requires":"6.2","requires_php":"8.0","requires_plugins":null,"header_name":"\u00c5ngerr\u00e4tt SE for WooCommerce","header_author":"Dr Lassis","header_description":"Handles the statutory right of withdrawal (Swedish Distance Contracts Act) for WooCommerce stores.","assets_banners_color":"957986","last_updated":"2026-07-02 03:05:00","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":80,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.7.10":{"tag":"1.7.10","author":"castrasteel","date":"2026-07-02 03:05:00"},"1.7.9":{"tag":"1.7.9","author":"castrasteel","date":"2026-07-02 02:24:02"}},"upgrade_notice":{"1.7.9":"<p>The two withdrawal tabs are now labelled &quot;\u00c5ngerbeg\u00e4ran Nya&quot; and &quot;\u00c5ngerbeg\u00e4ran Alla&quot; to tell them apart.<\/p>","1.7.8":"<p>New &quot;\u00c5ngerbeg\u00e4ran&quot; tab in the order list showing all orders that have had a withdrawal request.<\/p>","1.7.7":"<p>Settings fields keep their desktop width and now have a minimum width on mobile instead of compressing.<\/p>","1.7.6":"<p>Settings field widths now reliably apply even when other admin styles tried to override them.<\/p>","1.7.5":"<p>Settings fields now have a uniform width with a minimum size and no longer overflow the screen on mobile. No configuration changes needed.<\/p>","1.7.4":"<p>Responsive settings fields: the admin settings screen now works correctly on phones and narrow windows. No configuration changes needed.<\/p>","1.7.3":"<p>Optional partial returns, article numbers and shipping method shown on the withdrawal page and in emails. Partial returns are off by default; no action needed to keep current behaviour.<\/p>","1.7.2":"<p>More reliable email-code verification (no PHP sessions) and coding-standards hardening.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3593236,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3593236,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3593341,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3593341,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.7.10","1.7.9"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[131785,55969,263226,125111,286],"plugin_category":[45],"plugin_contributors":[269775],"plugin_business_model":[],"class_list":["post-328192","plugin","type-plugin","status-publish","hentry","plugin_tags-gdpr","plugin_tags-returns","plugin_tags-right-of-withdrawal","plugin_tags-sweden","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-castrasteel","plugin_committers-castrasteel"],"banners":{"banner":"https:\/\/ps.w.org\/angerratt-se-for-woocommerce\/assets\/banner-772x250.png?rev=3593341","banner_2x":"https:\/\/ps.w.org\/angerratt-se-for-woocommerce\/assets\/banner-1544x500.png?rev=3593341","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/angerratt-se-for-woocommerce\/assets\/icon-128x128.png?rev=3593236","icon_2x":"https:\/\/ps.w.org\/angerratt-se-for-woocommerce\/assets\/icon-256x256.png?rev=3593236","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>\u00c5ngerr\u00e4tt SE for WooCommerce gives Swedish WooCommerce stores a complete, self-service workflow for the statutory right of withdrawal under the Distance Contracts Act (distansavtalslagen).<\/p>\n\n<p>A dedicated withdrawal page lets the customer:<\/p>\n\n<ol>\n<li>Enter their email address and receive a one-time verification code (OTP).<\/li>\n<li>Verify their identity by entering the code.<\/li>\n<li>Select an eligible order from the last 30 days and submit the withdrawal request.<\/li>\n<\/ol>\n\n<p>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.<\/p>\n\n<p><strong>Key features<\/strong><\/p>\n\n<ul>\n<li><strong>Dedicated withdrawal page<\/strong> (<code>\/angra-kop\/<\/code>) created automatically on activation.<\/li>\n<li><strong>Customer verification<\/strong> via a one-time code (OTP) sent to the order's email address \u2014 no login required. Works for both registered users and guests.<\/li>\n<li><strong>Extensive exclusion options for custom-made products<\/strong> where the right of withdrawal does not apply. Exclusions can be set by tag, product category or individual products.<\/li>\n<li><strong>Timestamped confirmation email<\/strong> sent automatically to the customer, listing products, price and shipping cost \u2014 serves as a legal acknowledgement of receipt.<\/li>\n<li><strong>Admin notification<\/strong> on every withdrawal request, with a direct link to the order.<\/li>\n<li><strong>Automatic order status update<\/strong> in the WooCommerce order view.<\/li>\n<li><strong>Right-of-withdrawal information<\/strong> shown at checkout and on the order confirmation page.<\/li>\n<li><strong>Configurable time limit as fallback.<\/strong> Manual control of the exact delivery date. A carrier API integration that fetches the delivery date is available as an upgrade.<\/li>\n<li><strong>Contact details from the admin panel<\/strong> printed automatically on all pages in the withdrawal flow.<\/li>\n<li><strong>Two display modes<\/strong> \u2014 Hook (WooCommerce standard) or Floating tab. The floating tab works regardless of theme and page builder, including Klarna Checkout.<\/li>\n<li><strong>GDPR-friendly<\/strong> \u2014 no new customer data is collected; withdrawal data is deleted automatically after a configurable number of months (default 36).<\/li>\n<\/ul>\n\n<p>This plugin is built for the Swedish market and its interface texts are in Swedish.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/angerratt-se-for-woocommerce<\/code> directory, or install the plugin through the WordPress Plugins screen directly.<\/li>\n<li>Activate the plugin through the Plugins screen in WordPress.<\/li>\n<li>A withdrawal page (<code>\/angra-kop\/<\/code>) containing the <code>[ngersefo_angerratt]<\/code> shortcode is created automatically on activation.<\/li>\n<li>Go to WooCommerce \u2192 \u00c5ngerr\u00e4tt to configure exclusions, the withdrawal window, contact details and display options.<\/li>\n<\/ol>\n\n<p>WooCommerce 10.5.3 or later is required (this includes the security fix for CVE-2026-3589).<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"which%20page%20do%20customers%20use%3F\"><h3>Which page do customers use?<\/h3><\/dt>\n<dd><p>On activation the plugin creates a page at <code>\/angra-kop\/<\/code> containing the <code>[ngersefo_angerratt]<\/code> shortcode. You can move the shortcode to any page you like.<\/p><\/dd>\n<dt id=\"does%20it%20support%20guest%20orders%3F\"><h3>Does it support guest orders?<\/h3><\/dt>\n<dd><p>Yes. Identity is verified with a one-time code sent to the order's email address, so customers do not need an account.<\/p><\/dd>\n<dt id=\"is%20partial%20return%20supported%3F\"><h3>Is partial return supported?<\/h3><\/dt>\n<dd><p>Yes. Partial returns are optional and disabled by default \u2014 the plugin then registers a full withdrawal of the selected order, exactly as before. When you enable partial returns under WooCommerce \u2192 \u00c5ngerr\u00e4tt, 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.<\/p><\/dd>\n<dt id=\"where%20is%20the%20data%20stored%3F\"><h3>Where is the data stored?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.7.10<\/h4>\n\n<ul>\n<li>Hardening: sanitize the selected-items input on submission, use a <code>$wpdb-&gt;prepare()<\/code> placeholder for the internal table name, and remove a redundant <code>suppress_filters<\/code> flag. No functional changes.<\/li>\n<\/ul>\n\n<h4>1.7.9<\/h4>\n\n<ul>\n<li>Tweak: the two withdrawal tabs in the order list are now told apart \u2014 WooCommerce's built-in status filter is labelled \"\u00c5ngerbeg\u00e4ran Nya\" (orders still awaiting handling) and the new full view is \"\u00c5ngerbeg\u00e4ran Alla\". Only the tab labels change; the order status itself is unchanged.<\/li>\n<\/ul>\n\n<h4>1.7.8<\/h4>\n\n<ul>\n<li>New: a \"\u00c5ngerbeg\u00e4ran\" 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.<\/li>\n<\/ul>\n\n<h4>1.7.7<\/h4>\n\n<ul>\n<li>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.<\/li>\n<\/ul>\n\n<h4>1.7.6<\/h4>\n\n<ul>\n<li>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.<\/li>\n<\/ul>\n\n<h4>1.7.5<\/h4>\n\n<ul>\n<li>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.<\/li>\n<\/ul>\n\n<h4>1.7.4<\/h4>\n\n<ul>\n<li>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.<\/li>\n<\/ul>\n\n<h4>1.7.3<\/h4>\n\n<ul>\n<li>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 \"\u00c5ngra ett k\u00f6p\" page with the [ngersefo_angerratt] shortcode is created.<\/li>\n<li>New: optional partial returns. Enable it under WooCommerce \u2192 \u00c5ngerr\u00e4tt to let customers select individual products to withdraw via checkboxes in the confirmation step, with the order total recalculated for the selected items.<\/li>\n<li>New: per-store setting for whether the shipping cost is refunded on a partial return (full returns always refund shipping).<\/li>\n<li>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.<\/li>\n<li>New: the shipping method name is printed under the shipping line on the withdrawal page and in both emails.<\/li>\n<li>The withdrawal request now records the return type and shipping handling for traceability.<\/li>\n<\/ul>\n\n<h4>1.7.2<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>Output escaping, input unslashing\/sanitization and <code>wp_parse_url()<\/code> usage brought fully in line with the WordPress coding standards.<\/li>\n<\/ul>\n\n<h4>1.7.1<\/h4>\n\n<ul>\n<li>Public release prepared for the WordPress.org directory.<\/li>\n<li>Removed the external license check and the bundled update mechanism (updates are handled by WordPress.org).<\/li>\n<li>Internationalization, database and nonce handling reviewed against the WordPress coding standards.<\/li>\n<\/ul>","raw_excerpt":"Lets customers exercise their statutory right of withdrawal (Swedish Distance Contracts Act) in your WooCommerce store, with email verification.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/328192","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=328192"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/castrasteel"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=328192"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=328192"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=328192"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=328192"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=328192"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=328192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}