Right of Withdrawal flow for shop

विवरण

Right of Withdrawal flow for shop implements the consumer right of withdrawal mandated by the European Union Consumer Rights Directive (2011/83/EU), giving customers a clean, server-validated way to exercise their 14-day cooling-off period.

The plugin adds a “Withdraw from order” button in the customer’s account, opens an accessible modal where customers can pick specific items, enter an IBAN and select a withdrawal reason, then notifies the shop via HTML email and tracks the refund through to completion.

Key features

  • Full or partial withdrawal — customers select specific items and quantities.
  • Server-side amount calculation — line totals are read from the order, never trusted from the client. Coupon discounts are correctly accounted for via WC_Order_Item::get_total().
  • IBAN format + Mod-97 validation (works in any EU country with bcmod or pure-PHP fallback).
  • Order-meta storage (withdrawal date, IBAN, reason, items, refund status).
  • Admin metabox with status updates: Mark as refunded / Mark as partially refunded.
  • Optional automatic creation of an order refund record (with optional restock).
  • Direct link to the withdrawal modal from the order confirmation email. The link opens the customer’s account “View order” page; standard WordPress / WooCommerce authentication applies — no custom login, no magic-link auto-login.
  • HTML emails for both customer and admin; styled inline for Gmail/Outlook compatibility.
  • HPOS (Custom Order Tables) compatible.
  • Settings page nested under the WooCommerce menu.

Compliance reference

  • Directive 2011/83/EU on consumer rights, Articles 9–14 (Right of withdrawal).
  • The 14-day period is configurable; the plugin defaults to the directive’s prescribed minimum.
  • Refunds are processed to the bank account supplied by the consumer (IBAN), satisfying the directive’s requirement to use the same payment means unless the consumer explicitly agrees to another method.

Requirements

  • WooCommerce 7.0 or later
  • PHP 8.0 or later
  • WordPress 6.0 or later

इंस्टॉलेशन

  1. Upload the plugin folder to /wp-content/plugins/.
  2. Activate the plugin through the Plugins menu in WordPress.
  3. Go to WooCommerce Right of Withdrawal and configure the settings.
  4. Pick the terms-and-conditions page and customise the button appearance.

सामान्य प्रश्न

Is the plugin HPOS compatible?

Yes. The plugin declares full compatibility with the WooCommerce Custom Order Tables (HPOS) and uses the WC_Order meta API throughout — never get_post_meta() on the order ID.

Does the refund amount account for coupon discounts?

Yes. The plugin reads WC_Order_Item::get_total() (the post-coupon line total) plus get_total_tax(), so a customer returning a coupon-discounted item gets the correct, post-discount refund.

How do I change the withdrawal period?

Default is the EU-mandated 14 days. You can change the number and the unit (days / months / years) in the settings, and choose whether the period starts from the order’s payment date or completion date.

Does the email button log the customer in automatically?

No. The button in the order email is a regular link to the customer’s “View order” page. If the customer is not signed in, WordPress / WooCommerce shows the standard login form and returns the customer to the same page after authentication. The plugin does not implement its own login flow.

Where does the customer start a withdrawal request?

Two entry points: the “Withdraw from order” action button in My Account Orders, and the same button in the order confirmation email. Both open the same modal on the customer’s “View order” page.

Can a customer submit more than one partial withdrawal for the same order?

Yes. The plugin tracks per-line cumulative withdrawn quantities — a customer can return 1 of 3 items today, then 1 more next week. Further submissions are blocked once every line has been fully accounted for.

Does it work for guest checkout (no customer account)?

No. The modal renders only for logged-in customers viewing their own order. Guest orders have no customer to authenticate, so the email button has no destination for them. This is by design — without an account the plugin cannot verify who is requesting the refund.

Which countries’ IBANs are accepted?

Any country that uses IBAN. The plugin validates the standard format (2-letter country code + 2 check digits + up to 30 alphanumeric characters) and runs the Mod-97 checksum (uses bcmod if available, falls back to pure PHP). Non-IBAN formats are rejected at submit time.

What happens when the admin clicks “Mark as refunded”?

If “Create WooCommerce refund automatically” is enabled (default), a WC_Order_Refund record is created with the exact line items and amount the customer requested; the order totals update accordingly, and stock is restocked if enabled. A confirmation email is then sent to the customer. Without auto-refund, only the order status and metadata are updated — no WC_Order_Refund is created.

Where can I find the plugin’s settings?

WooCommerce Settings Right of Withdrawal. The tab has five sub-tabs: General (notifications, deadline, terms page), Refund behaviour (auto-refund, restock), Withdrawal button (label, colours), Modal appearance (colours, opacity, width) and Required fields in modal (reason, IBAN, contact email, terms checkbox).

Can I customise the list of withdrawal reasons shown to the customer?

Yes. The reasons are filterable. In a child-theme functions.php or a small custom plugin:

add_filter('rowfs_withdrawal_reasons', function ($reasons) {
    $reasons['gift_unsuitable'] = __('Gift was unsuitable', 'your-textdomain');
    unset($reasons['found_better_price']);
    return $reasons;
});

समीक्षाएं

इस प्लगइन के लिए कोई समीक्षा नहीं है।

सहायक &डेवलपर्स

यह खुला स्रोत सॉफ्टवेयर है। अनुगामी लोगो ने इस प्लगइन के लिए योगदान दिया है।

योगदानकर्ता

बदलाव विवरण

1.0.0

  • Initial public release.
  • EU Directive 2011/83/EU compliant withdrawal flow.
  • Inline-styled email button for Gmail/Outlook compatibility.
  • Coupon-aware refund math (uses get_total() not get_subtotal()).
  • HPOS support; partial-withdrawal item-level selection.