WooCommerce plugin for digital withdrawal and returns, compliant with D.Lgs. 209/2025, with full logging, traceability and tamper-proofing.
Overview
WooCommerce plugin that manages the right of withdrawal compliant with D.Lgs. 209/2025, allowing customers to exercise withdrawal both from their personal area and as guests, with full logging, traceability and tamper-proofing.
Main Features
1. Customer Withdrawal Management
- Withdrawal for registered users โ Access from "My Withdrawals" area in My Account
- Guest withdrawal โ Verification with Order Number + Email + Name (supports with/without #)
- Product selection โ User can select individual products (partial withdrawal)
- Deadline calculation โ Based on delivery date or order date (configurable)
- Optional notes โ User can add notes to the request
- Privacy + Terms โ Mandatory checkbox with links to Privacy Policy and Terms
2. Delivery Date
- Admin sets date โ In order backend, "Delivery date" field
- Automatic calculation โ Order date + X days (configurable, e.g., 2 days)
- User can enter โ Optional (disabled by default)
- Validation โ Date cannot be before the day after the order nor in the future
- "Delivered" status โ Automatically set when delivery date is recorded
- "Set as Delivered" button โ In order backend to update status and date
3. Product Exclusion
- Single exclusion โ Metabox in product: "Exclude from withdrawal right"
- Category exclusion โ Select excluded categories in settings
- Type exclusion โ Digital, virtual, subscription, customized products
- Bulk edit โ Mass edit from products list
- Exclusion reason โ Digital, customized, perishable, other
4. Admin Management
- Withdrawal list โ Columns: ID, Order, Customer, Products, Date, Integrity, Email
- Status filter โ Pending, Accepted, Completed, Rejected
- Withdrawal details โ View products, customer notes, rejection reason
- Status change โ With automatic email to customer
- Rejection reason โ Mandatory text field sent via email
- Internal notes โ Private field for admin
- Manual creation โ Dedicated page to create withdrawals from admin (with order search)
- Creation redirect โ Redirects from post-new.php?post_type=wc_recesso to the correct page
- Order statuses โ "Awaiting return", "Return completed", "Delivered"
- Withdrawal column โ In WooCommerce order list shows withdrawal status
5. Logs and Traceability
- Email to customer โ Immediate confirmation with timestamp and products
- Email to admin โ New request notification
- Email log โ Separate table wp_wc_recesso_email_log
- Email log page โ Dedicated under WooCommerce with filters by email, type, date, status
- Email column โ In withdrawal list shows number of sent emails
- Cryptographic hash โ HMAC-SHA256 to verify data integrity
- IP and User Agent โ Tracked for each request
- Soft delete โ Withdrawals cannot be permanently deleted
6. Automatic Emails
- Customer receipt โ Immediately after request: Withdrawal ID, order, timestamp, products, days, return address
- Admin notification โ New request: Customer details, products, management link
- Status update โ Admin changes status: New status, products, rejection reason (if any), return address (if accepted)
- All emails are customizable with placeholders and default texts visible in settings
7. Plugin Settings
- General โ Withdrawal days (min 14), use/delivery, delivery window, automatic calculation, allow user
- Return address โ Customizable, store default
- Excluded types โ Digital, virtual, subscription, customized products
- Exclusions โ Excluded categories, Terms page
- Form texts โ Introductory message, success message, privacy (multilingual with placeholders)
- Emails โ Subject and body for receipt, admin, status change (multilingual with placeholders)
- Privacy โ Privacy Policy URL
- CSS โ Custom CSS with available classes guide
8. Shortcode and Elementor Widget
[recesso_dlgs209] โ
Public form for guest customers
-
Dedicated Elementor widget โ Insert and customize the withdrawal/returns form directly from the page builder, no shortcode needed: colors, texts and layout editable with live preview.
9. License
- Activation โ License key with API validation
- Daily cron โ Automatic license status check
- Updates โ Only with active license
- Plugin lock โ If not activated, admin warning
Data Tables
- wp_posts (post_type=wc_recesso) โ Withdrawal requests
- wp_postmeta โ Metadata: order, products, timestamp, notes, hash
- wp_wc_recesso_email_log โ Log of all sent emails (with status and error reason)
Security and Compliance
- HMAC-SHA256 hash for integrity
- Append-only email log
- Soft delete (cannot be permanently deleted)
- IP and User Agent tracking
- Confirmation email as documentary proof
- Guest support with email verification
- Email log page for complete audit
Multilingual
- Native support for Polylang and WPML
- Translations included: Italian, English
- Multilingual form and email texts with placeholders
- Extendable to other languages
Statuses
Withdrawal Statuses
- recesso-in-attesa โ Request received, under evaluation
- recesso-accettato โ Accepted, customer must return
- recesso-completato โ Return completed, refund processed
- recesso-rifiutato โ Rejected with reason
Order Statuses
- wc-in-reso โ Awaiting return (total withdrawal)
- wc-reso-completato โ Return completed
- wc-delivered โ Delivered (delivery date recorded)
User Flows
Registered User
Order paid โ Delivery date (if physical) โ Access My Account โ Order details โ Click "Right of withdrawal" (if within terms) โ Select products โ Add notes โ Confirm โ Receives confirmation email โ Admin manages request โ Customer receives update emails
Guest User
Order paid โ Access page with shortcode [recesso_dlgs209] โ Enter: Order Number + Email + Name โ Verify โ Product selection โ Confirm โ Receives confirmation email โ Admin manages request
Admin Flow
Withdrawal Management
- Withdrawal list: WooCommerce โ Withdrawals DLgs 209
- Detail: Click on a withdrawal
- Change status: Select status + optional rejection reason
- Automatic email: Sent to customer
Manual Creation
- WooCommerce โ New Withdrawal
- Search order: Enter ID or number (with/without #)
- Select products: Check those to withdraw
- Create: Generate the request
Email Log
- WooCommerce โ Email Log
- Filters: By email, type, date, status
- View: All sent/failed emails
Technical Summary
- Version โ 1.2.0
- Requires โ WooCommerce
- Minimum PHP โ 7.4
- Guest support โ Yes
- Multilingual support โ Yes (Polylang/WPML)
- Immutable log โ Yes (hash + email log)
- Soft delete โ Yes
- Bulk product edit โ Yes
- CSS customization โ Yes
- Email log page โ Yes
- Admin withdrawal creation โ Yes
What's New
- Email Log Page โ Dedicated with filters for complete audit
- Email Column โ In withdrawal list shows number of sent emails
- Excluded types โ Digital, virtual, subscription products
- Default texts โ Visible placeholders in all emails and form texts
- Modern CSS โ Updated graphics in settings
- Creation redirect โ "New withdrawal" CPT button redirected to correct page
- Return address โ Customizable in settings