
Plogins Withdraw – EU Right of Withdrawal & Returns for WooCommerce
by Mariusz Szatkowski
Plogins Withdraw adds an easy withdrawal function to WooCommerce, aligned with EU Directive 2023/2673 (the “withdrawal button”, Art. 11a): a clear way for customers to declare that they withdraw from a distance contract, in full or per item, within the statutory withdrawal period.
It is a request-and-log plugin: it records the customer’s withdrawal declaration, emails a confirmation to the customer and a notification to the shop, and tracks the request status in the admin. It never moves money on its own, you process any refund in the normal WooCommerce order screen, matching the legal model where the customer declares and the trader acts.
What it does
- Withdrawal form: the
[withdraw_form]shortcode renders the whole flow: look up an order by number and billing email (works for guests too), select items and quantities, then confirm on a step of its own, because Art. 11a(3) wants the confirmation to be a separate control labelled only “confirm withdrawal”. - Full or partial withdrawal: the customer chooses how many of each item to withdraw from.
- Withdrawal button in My Account: a “Withdraw from this order” button appears under the order details and links to your withdrawal page with the order pre-filled.
- Withdrawal-period check: configurable period (statutory minimum 14 days), measured from delivery (order completion) or, if never completed, from the order date.
- Admin log: a WooCommerce > Withdrawal Requests screen lists every request with its items, customer and status (pending, accepted, rejected, processed), filterable by status, searchable by email or order number and paged, with a detail screen per request showing the stored declaration and the reason the customer gave.
- A rejection has to say why: the reason is required before a request can be rejected, is kept with the request, and is printed in the email the customer receives.
- WooCommerce emails: seven of them, each with its own entry under WooCommerce > Settings > Emails, using your store template, logo and footer. The declaration acknowledgement, the shop notification, one per request status, and the guest access link. Any of them can be reworded, restyled or switched off on its own.
- The acknowledgement is a record: it repeats the declaration back in the exact words the customer confirmed, stored at the time, with the date and time of submission, which is what Art. 11a(4) asks for.
- Return information (Art. 14(1)): the acceptance message states where to send the goods, taken from a return address field or your store address, the deadline counted from the day the customer declared, and who bears the direct cost of the return. That last one says nothing until you choose it, because you may only charge the customer if you told them before the sale.
- Your own refund deadline (Art. 13(1)): the request log shows the date you owe the refund by, 14 days from the declaration, and marks it once it has passed.
- Digital content consent (Art. 16(m)): optional. One unticked checkbox at checkout, on both the classic and the block checkout, asking the customer to start supply immediately and acknowledging that the right of withdrawal is lost once it has. What was agreed, when, in which exact words and for which products is stored with the order and confirmed back on the order screen and in the order email. Once WooCommerce has actually served a download, that item drops out of the withdrawal form, server side.
- Emailed one-time link (optional): off by default. With it on, step one asks for the order number and billing email and emails a single-use link to the address on the order instead of opening the form, so knowing an order number is not enough to read what somebody bought. The answer is the same whether the order exists or not, requests are rate limited, and signed-in customers arriving from My Account skip the link entirely.
- The statutory texts, generated: the model withdrawal form (Annex I.B) is built from your seller details and printed on the form, and
[withdraw_instructions]renders the model instructions on withdrawal (Annex I.A) for your terms page, both translatable and both in step with your configured withdrawal period. Type your own wording and it wins. - Guest friendly: no account needed; the order-number + billing-email lookup works for guest orders.
- HPOS + Blocks compatible: reads orders through the WooCommerce order API.
Requirements
- WordPress 6.5 or later
- PHP 8.1 or later
- WooCommerce 8.0 or later
Translations
Plogins Withdraw is fully translatable and ships the plogins-withdraw.pot template. Translations are delivered by WordPress.org language packs from translate.wordpress.org, which is where Polish, German and Spanish are being contributed; the package itself carries no compiled translation files.
Screenshots

The withdrawal request form: order lookup by number and billing email (guest-friendly), with the 14-day right-of-withdrawal notice.

Item selection: full or partial withdrawal with per-item quantities, the model withdrawal text and the declaration.

Settings (WooCommerce > Withdrawal): withdrawal period, form page, eligible statuses, notification email and legal texts, with the request log.