Beskrivning
EU Withdrawal Manager for WooCommerce – EU harmonized withdrawal-button requirement under Directive (EU) 2023/2673 and the Distance Contracts Act (distansavtalslagen), with all the bells and whistles included. It’s built on your real order data, not a contact form that just emails the store.
En dedikerad sida låter kunden:
- Ange e-postadressen och få en engångskod för verifiering.
- Verifiera sin identitet genom att ange koden.
- Select an eligible order — the same time window as the actual withdrawal deadline, based on your delivery-time setting — and submit the withdrawal declaration.
When a withdrawal declaration is submitted, the plugin records it, sets a dedicated order status, sends the customer a confirmation email and notifies the store. The confirmation email only confirms what was received — it makes no commitment about refund amount, shipping cost or timing until you’ve actually reviewed the declaration. All emails use the standard WooCommerce email template so they match the rest of your store’s messaging.
On the admin side, the same order data drives everything: a single shared deadline calculation keeps the order list, the actual submission window, and the WooCommerce order status in sync — there’s no separate frontend estimate that can drift from what the backend actually enforces. A Setup checklist tracks the handful of things every store needs to configure, GDPR-covered data is retained only as long as you choose, and every withdrawal is logged with a direct link back to the order.
This plugin’s flows have been reviewed and adjusted to harmonize with the withdrawal-button requirement: identity verification, a two-step confirmation, and immediate confirmation of receipt, matching the pattern required across EU member states. This plugin provides tools, not legal certification: you remain responsible for ensuring your store’s texts and exclusions comply with the consumer protection legislation applicable in your market.
Interface texts are in English by default, with a complete Swedish translation bundled and used automatically.
Viktigaste funktionerna
- Snabb konfiguration med avancerade alternativ ur vägen. Inställningssidan har två flikar: ”Allmänt” för de få inställningar som alla butiker behöver och ”Avancerat” för undantag per kategori/produkt, delvisa returer, datalagring och anpassning av visningen.
- Särskild sida för att ångra köp (
/angra-kop/) skapas automatiskt vid aktivering. - Kundverifiering med en engångskod som skickas till orderns e-postadress — ingen inloggning krävs. Fungerar både för registrerade användare och gäster.
- Omfattande möjligheter att undanta specialtillverkade produkter som inte omfattas av ångerrätten. Undantag kan anges utifrån produktetikett, produktkategori eller enskilda produkter.
- A confirmation email that only confirms. It lists the requested products as a reference copy of the order, but makes no promises about refund amount or timing — that follows separately once you’ve reviewed the declaration.
- Admin notification on every withdrawal declaration, with a direct link to the order.
- Automatisk uppdatering av orderstatus i WooCommerce ordervy.
- Information om ångerrätten visas i kassan och på orderbekräftelsesidan — som en flytande flik (standard) eller som integrerad WooCommerce-text, beroende på din visningsinställning. Den visas aldrig på varukorgssidan; lagen kräver att informationen lämnas innan kunden blir bunden av avtalet, och detta krav uppfylls redan i kassan.
- Konfigurerbar tidsgräns, som används konsekvent både för ångerfristen och för vilka ordrar kunden kan välja — aldrig två olika tidsgränser som måste hållas synkroniserade. Buffertdagarna används för att uppskatta leveranstiden; det exakta leveransdatumet kontrolleras manuellt hos transportören. Automatisk hämtning av leveransdatum via Sendify och Fraktjakt planeras för premiumversionen.
- Kontaktuppgifter från adminpanelen visas automatiskt på alla sidor i flödet för återkallande.
- Två visningslägen — Flytande flik (standard, fungerar oavsett tema och sidbyggare, inklusive Klarna Checkout) eller Hook (integrerad WooCommerce-stil om din kassa redan använder standardlayouten).
- GDPR-anpassat – uppgifter om återkallanden raderas automatiskt efter ett valbart antal månader (standard är 36). Uppgifterna omfattas också av WordPress egna verktyg för export och radering av personuppgifter. Du väljer om uppgifterna ska raderas när tillägget avinstalleras.
Skärmdumpar









Installation
- Ladda upp tilläggets filer till katalogen
/wp-content/plugins/angerratt-se-for-woocommerceeller installera tillägget direkt via sidan Tillägg i WordPress. - Aktivera tillägget via sidan Tillägg i WordPress.
- En sida för att ångra köp (
/angra-kop/) med kortkoden[ngersefo_angerratt]skapas automatiskt vid aktivering. - Gå till WooCommerce Ångerrätt för att konfigurera undantag, ångerfrist, kontaktuppgifter och visningsalternativ.
WooCommerce 10.5.3 eller senare krävs (den versionen innehåller säkerhetskorrigeringen för CVE-2026-3589).
Vanliga frågor
-
Vilket sidan ska kunderna använda?
-
Vid aktivering skapar tillägget en sida på
/angra-kop/som innehåller kortkoden[ngersefo_angerratt]. Du kan flytta kortkoden till valfri sida. -
Stöds gästordrar?
-
Ja. Kundens identitet verifieras med en engångskod som skickas till e-postadressen för ordern, så kunden behöver inget konto.
-
Stöds delreturer?
-
Ja. Delreturer är valfria och inaktiverade som standard – då registrerar tillägget att hela den valda ordern ångras, precis som tidigare. När du aktiverar delreturer under WooCommerce Ångerrätt får kunden en kryssruta vid varje produkt som omfattas av ångerrätten i bekräftelsesteget och kan välja vilka produkter som ska returneras. Orderns totalsumma räknas om utifrån de valda produkterna, och du kan för varje butik välja om fraktkostnaden ska återbetalas vid en delretur.
-
Var lagras datan?
-
Withdrawal declarations are stored in a dedicated table in your own WordPress database. Records are removed automatically after the retention period you set in the settings.
-
Anger bekräftelsemeddelandet om kunden kommer att få en återbetalning?
-
No, and that’s deliberate. The confirmation email only confirms that the declaration was received and lists which products it covers — it never states a refund amount, shipping status or a processing timeline, since those depend on your review of the declaration. You decide the outcome and communicate it separately; the plugin doesn’t commit to anything on your behalf before that.
-
Varför visas ingen information om ångerrätten på varukorgssidan?
-
Distansavtalslagen kräver att denna information lämnas innan kunden blir bunden av avtalet, vilket sker i kassan — inte när varor bara läggs i varukorgen. Tillägget visar informationen i kassan och på orderbekräftelsesidan, vilket uppfyller kravet; varukorgssidan har därför avsiktligt utelämnats.
Recensioner
Bidragsgivare och utvecklare
”EU Withdrawal Manager for WooCommerce” är programvara med öppen källkod. Följande personer har bidragit till detta tillägg.
Bidragande personer”EU Withdrawal Manager for WooCommerce” har översatts till 1 språk. Tack till översättarna för deras bidrag.
Översätt ”EU Withdrawal Manager for WooCommerce” till ditt språk.
Intresserad av programutveckling?
Läs programkoden, kika på SVN-filförvaret eller prenumerera på utvecklarloggen via RSS.
Ändringslogg
1.10.0
- Fix: the per-IP rate limit on verification codes no longer counts every visitor as the same person on stores behind a reverse proxy (Traefik, nginx, a load balancer, Docker).
REMOTE_ADDRis the proxy’s own address in those setups, so the limit became a single bucket for the whole internet and switched the withdrawal form off for everyone after 15 requests. Reported from a live store. Proxy headers are now trusted only whenREMOTE_ADDRis a private or reserved address, which is exactly the case where it cannot be the visitor: stores without a proxy keep a limit that cannot be spoofed. A newngersefo_client_ipfilter covers setups such as Cloudflare, where the address is public but still not the visitor’s. - Fix: activating the plugin on a store that previously ran the pre-WordPress.org release line no longer leaves the old shortcode standing as visible text above the withdrawal form. The legacy shortcode is now replaced rather than supplemented, and only the shortcode tag itself is touched — anything the store wrote around it is left alone.
- New: the legacy shortcode is registered as an alias of the current one, as deliberate backwards compatibility. A store that placed it on a page other than the one activation finds still gets a working form, with stylesheet and script configuration loaded as usual.
1.9.0
- New: the plugin now calls itself ”EU Withdrawal Manager for WooCommerce” everywhere (previously ”Ångerrätt SE for WooCommerce”), to reflect that its flows are now reviewed against the EU-wide withdrawal-button requirement, not just the Swedish implementation of it.
- New: plugin source language is now English (previously Swedish). A bundled Swedish translation is included and used automatically regardless of what may be installed via WordPress.org, so nothing changes for existing Swedish-language stores.
- New: Setup checklist on the General tab — tracks a handful of self-attested and auto-verified setup steps as a personal reminder, not a legal certification.
- New: a standing responsibility notice on the settings screen clarifies that the plugin provides tools, not legal certification.
- Tweak: customer-facing wording changed from ”withdrawal request” to ”withdrawal declaration” to match the EU directive’s own terminology.
- Tweak: removed the confirmation checkbox on the final step — not legally required, and arguably an extra hurdle to withdrawal. Replaced with a short notice under the confirm button clarifying that submitting does not process a refund automatically.
- Tweak: the buffer-days field no longer has a default value. A guessed number could either expose you to a needlessly long withdrawal window or silently block customers still within their real statutory period — the setting now requires a deliberate choice.
- Tweak: the customer confirmation email now includes the customer’s name and a timezone-qualified timestamp, and states explicitly that receipt does not confirm a refund, the applicable withdrawal period, statutory exceptions, or return instructions.
- Tweak: the return-shipping text on the settings screen now correctly states that the customer’s liability for return shipping is conditional, not absolute.
- Fix: shipping refund status is now shown consistently in both the customer-facing UI and the customer confirmation email.
- Fix: partial-return shipping calculation in the frontend now matches the backend’s logic exactly.
- Fix: buffer-days fallback values were inconsistent across three places in the code — now consistently 0 everywhere.
- Hardening: OTP rate limits raised (310 per email, 515 per IP, per 15 minutes) as an interim mitigation for customers withdrawing multiple orders in one visit.
1.8.1
- Justering: Flytande flik är nu standardmetod för visning i stället för Hook. Den fungerar oavsett tema eller sidbyggare, vilket minskar risken för att informationen om ångerrätten inte visas utan någon tydlig varning i en inkompatibel kassa. Detta gäller nya installationer och butiker som aldrig har sparat inställningssidan; butiker som redan har sparat sina inställningar behåller sitt tidigare val.
- Justering: vanliga frågor och funktionsbeskrivningen har utökats med information om varför bekräftelsemeddelandet inte innehåller några utfästelser och varför informationen om ångerrätten inte visas på varukorgssidan.
1.8.0
- Nytt: inställningssidan är nu uppdelad i två flikar — ”Allmänt” för de få saker som alla butiker behöver ställa in (undantagna etiketter, tidsgräns, kontaktuppgifter och text i kassan) och ”Avancerat” för allt annat (undantagna kategorier/produkter, delvisa returer, datalagring och visning med flytande flik). Nya installationer får en kort och fokuserad konfiguration i stället för en lång sida med över 20 fält; inget har tagits bort, bara flyttats.
- Justering: kundens bekräftelsemeddelande anger inte längre något återbetalningsbelopp, någon status för återbetalning av fraktkostnad eller någon tidsangivelse om ”inom en arbetsdag”. Det bekräftar nu endast vad som har tagits emot och vilka produkter ångerbegäran gäller, med information om att ett beslut meddelas separat — det är din granskning som avgör utfallet, inte tillägget, så meddelandet gör inga utfästelser innan granskningen har genomförts.
- Justering: de kundinriktade formuleringarna på ångerrättssidan har skrivits om för ett enklare och mer korrekt språk — exempelvis står det nu ”Skicka ångerbegäran” på knappen i stället för det mer juridiska ”Frånträd avtalet”, och orderlistan antyder inte längre att varje listad order med säkerhet omfattas av ångerrätten.
- Justering: fältet för verifieringskoden kan nu ta emot en inklistrad kod — siffrorna fördelas automatiskt över de sex rutorna i stället för att endast den första rutan fylls i.
- Justering: i visningsläget Flytande flik visas informationen om ångerrätten inte längre på varukorgssidan, utan endast i kassan och på orderbekräftelsesidan. Distansavtalslagen kräver att informationen lämnas innan kunden blir bunden av avtalet, vilket redan uppfylls i kassan; varukorgssidan är inte ett bindande steg.
- Rättelse: tidsfönstret för val av order och den faktiska ångerfristen är nu alltid samma tidsperiod (14 dagar + din inställning för buffertdagar), beräknad av en gemensam funktion som används överallt där det är relevant. Tidigare använde orderlistan ett fast fönster på 30 dagar oberoende av inställningen för buffertdagar, vilket innebar att en butik med längre buffert än 16 dagar kunde ha ordrar som omfattades av tidsfristen men aldrig visades i listan.
- Härdning: när en ångerbegäran skickas in kontrolleras tidsfristen nu på nytt på servern, inte bara när orderlistan skapas. Antalet buffertdagar kan nu ställas in till högst 99 (tidigare 30).
1.7.14
- Justering: ”Undantagna produktkategorier” är nu en sökbar rullgardinsmeny som motsvarar de befintliga väljarna för etiketter och produkter, i stället för ett rutnät med kryssrutor. Butiker med många kategorier behöver inte längre bläddra igenom en lång lista för att hitta dem som ska undantas.
1.7.13
- Nytt: Verifieringskoden, kundens mottagningsbekräftelse och aviseringen till butiken är nu egna e-posttyper i WooCommerce. De visas under WooCommerce Inställningar E-post med eget ämne, egen rubrik och eget format, kan förhandsgranskas och renderas med WooCommerce egna mall och stilar precis som butikens övriga e-postmeddelanden. Aviseringen till butiken kan inaktiveras. De två kundmeddelandena kan inte inaktiveras eftersom ett köp inte kan ångras utan koden och distansavtalslagen kräver en mottagningsbekräftelse.
- Korrigering: Platshållare som
{site_title}skrevs ut bokstavligen i sidfoten i kundens mottagningsbekräftelse och e-postmeddelandena skickades utan de infogade stilarna från WooCommerce. Båda problemen berodde på att mallarna i WooCommerce renderades utanför dess e-postsystem. Meddelandena skickas nu genom systemet. - Nytt: Versioner i ren text av alla tre e-postmeddelandena för mottagare vars e-postklient begär det.
1.7.12
- Korrigering: Tillägget tvingar inte längre fram ett eget ”From”-fält i utgående e-post. Tidigare kopierades WooCommerce avsändaradress till varje meddelande, vilket åsidosatte webbplatsens egen e-postkonfiguration. SMTP-tillägg och webbhotell som ändrar avsändaren till en adress som de får skicka från lämnar ett uttryckligen angivet From-fält orört. Följden blev att butikens ordermeddelanden levererades, medan tilläggets meddelanden skickades utan autentisering och avvisades av mottagaren – utan någon synlig varning eftersom WordPress rapporterar en sådan sändning som lyckad. Tilläggets e-postmeddelanden ärver nu den avsändare som webbplatsen redan använder. Om dina ordermeddelanden kommer fram gör även dessa det.
- Nytt: Filtret
ngersefo_email_headersför den som vill ange avsändaren i kod.
1.7.11
- Nytt: Förklarande text under rubrikerna Undantag, Tidsgräns och Returalternativ på inställningssidan.
- Nytt: Under Dataskydd finns nu en inställning för om tilläggets tabell och alternativ ska tas bort när tillägget avinstalleras. Inställningen är inaktiverad som standard – uppgifterna behålls precis som tidigare. Att inaktivera tillägget tar aldrig bort något.
- Nytt: Uppgifter om ångerbegäranden omfattas nu av WordPress verktyg för export och radering av personuppgifter. Tillägget bidrar även med förslag på text till webbplatsens integritetspolicy.
- Korrigering: Den flytande fliken är 50 procent större i samtliga tre storlekar. De tidigare storlekarna var för små för att vara lättlästa.
- Korrigering: Den interna versionskonstanten var fortfarande 1.7.9 i version 1.7.10. Den styr versionsnumret som används för att kringgå cachelagring av tilläggets CSS och JavaScript. Därför nådde stiländringar inte återkommande besökare. Konstanten styrde även den automatiska databasuppgraderingen och följer nu tilläggets version.
- Korrigering: Sidan för att ångra köp raderas inte längre vid aktivering. Sedan version 1.7.3 raderades den befintliga sidan permanent vid varje aktivering, utan att flyttas till papperskorgen, och ersattes med en ny tom sida. Därmed gick butikens eventuella ändringar förlorade. Nu återanvänds en befintlig sida och kortkoden läggs bara till om den saknas.
- Korrigering: Om en anpassad färg valdes för den flytande fliken utan att färgväljaren ändrades sparades ingen färg alls.
- Korrigering: Visningsmetoden, flikarnas placeringar och flikstorleken valideras nu mot tillåtna värden när inställningarna sparas.
- Korrigering: I det första steget i flödet för att ångra köp returnerades en sessionstoken endast om e-postadressen var kopplad till en order som omfattades av ångerrätten. Trots det avsiktligt neutrala meddelandet gick det därför att skilja registrerade adresser från övriga. Alla svar är nu identiska.
- Justering: Tillägget heter nu ”Ångerrätt SE för WooCommerce” överallt. Rubriken i adminpanelen och felmeddelandena vid aktivering använde tidigare namnet ”Woo Ångerrätt”.
1.7.10
- Härdning: Indata för valda produkter saneras när formuläret skickas, en platshållare i
$wpdb->prepare()används för det interna tabellnamnet och en överflödigsuppress_filters-flagga har tagits bort. Inga funktionella ändringar.
1.7.9
- Justering: De två flikarna för ångerbegäranden i orderlistan skiljs nu åt – det inbyggda statusfiltret i WooCommerce heter ”Ångerbegäran Nya” (ordrar som fortfarande väntar på hantering) och den nya fullständiga vyn heter ”Ångerbegäran Alla”. Endast flikarnas etiketter ändras. Själva orderstatusen är oförändrad.
1.7.8
- Nytt: Fliken ”Ångerbegäran” med en räknare ovanför orderlistan i WooCommerce visar alla ordrar som någon gång har haft en ångerbegäran, oavsett aktuell status. De försvinner alltså inte längre från vyn när statusen ändras. Fungerar med både HPOS och klassisk orderlagring.
1.7.7
- Korrigering: Inställningsfältens bredder har återställts till den enkla infogade lösning som fungerade i version 1.7.3 (25 procents bredd), med en minsta bredd så att de inte längre trycks ihop på mobila enheter och en begränsning som hindrar dem från att sträcka sig utanför skärmen. Alla fält har återigen samma bredd.
1.7.6
- Korrigering: Breddreglerna för inställningsfälten tillämpas nu med tillräcklig prioritet för att på ett tillförlitligt sätt åsidosätta aktiva adminstilar från WooCommerce eller temat. I vissa konfigurationer åsidosattes de tidigare reglerna så att fälten fick full bredd. Nu har de konsekvent samma begränsade och responsiva bredd.
1.7.5
- Korrigering: Alla inställningsfält har nu samma enhetliga bredd. Textfält, textområden samt väljare för produkter och etiketter har samma maximala bredd (referensfältets bredd), så inget är bredare än de andra. De har även en minsta bredd för att förbli användbara och sträcker sig aldrig utanför skärmkanten på telefoner. Rutnätet med produktkategorier övergår dessutom till en enda kolumn på små skärmar.
1.7.4
- Korrigering: Inställningsfälten använder inte längre en fast bredd på 25 procent som gjorde att de trycktes ihop på telefoner och i smala webbläsarfönster. Textfält och textområden använder nu de responsiva WordPress-klasserna (regular-text/large-text), och väljarna för produkter och etiketter fyller den tillgängliga kolumnen upp till en lämplig maximal bredd. Inställningssidan kan därför användas på mobila enheter.
1.7.3
- Vid aktivering återskapas alltid sidan för att ångra köp på nytt: eventuella tidigare sådana sidor (med sluggarna angra-kop, angra-kop-N och woo_angerratt) raderas först permanent. Därefter skapas en ny sida med namnet ”Ångra ett köp” och kortkoden [ngersefo_angerratt].
- Nytt: Valfria delreturer. Aktivera funktionen under WooCommerce Ångerrätt så att kunderna kan välja enskilda produkter att ångra via kryssrutor i bekräftelsesteget. Orderns totalsumma räknas om utifrån de valda produkterna.
- Nytt: Inställning per butik för om fraktkostnaden ska återbetalas vid en delretur (vid fullständiga returer återbetalas frakten alltid).
- Nytt: Artikelnumret (produktens SKU eller, som reservlösning, produkt-ID:t i WooCommerce) visas under varje produktnamn på sidan för att ångra köp samt i e-postmeddelandena till kunden och administratören.
- Nytt: Fraktmetodens namn visas under fraktraden på sidan för att ångra köp och i båda e-postmeddelandena.
- Ångerbegäran registrerar nu returtyp och hantering av frakt för spårbarhet.
1.7.2
- Verifiering med engångskod är inte längre beroende av PHP-sessioner. Den använder nu en transient som identifieras med en engångstoken, vilket är mer tillförlitligt i olika cache- och webbhotellsmiljöer.
- Escapning av utdata, borttagning av snedstreck och sanering av indata samt användningen av
wp_parse_url()har anpassats helt till WordPress kodstandarder.
1.7.1
- Den offentliga versionen har förberetts för WordPress.org-katalogen.
- Den externa licenskontrollen och den medföljande uppdateringsmekanismen har tagits bort (uppdateringar hanteras av WordPress.org).
- Internationalisering samt hantering av databas och nonce-värden har granskats mot WordPress kodstandarder.
