Title: UDX Easy Returns &amp; Refunds for WooCommerce
Author: Dominik
Published: <strong>July 29, 2026</strong>
Last modified: July 29, 2026

---

Search plugins

![](https://ps.w.org/udx-easy-returns-refunds-for-woocommerce/assets/banner-772x250.
png?rev=3627745)

![](https://ps.w.org/udx-easy-returns-refunds-for-woocommerce/assets/icon-256x256.
png?rev=3627758)

# UDX Easy Returns & Refunds for WooCommerce

 By [Dominik](https://profiles.wordpress.org/trasek/)

[Download](https://downloads.wordpress.org/plugin/udx-easy-returns-refunds-for-woocommerce.1.0.3.zip)

 * [Details](https://wordpress.org/plugins/udx-easy-returns-refunds-for-woocommerce/#description)
 * [Reviews](https://wordpress.org/plugins/udx-easy-returns-refunds-for-woocommerce/#reviews)
 *  [Installation](https://wordpress.org/plugins/udx-easy-returns-refunds-for-woocommerce/#installation)
 * [Development](https://wordpress.org/plugins/udx-easy-returns-refunds-for-woocommerce/#developers)

 [Support](https://wordpress.org/support/plugin/udx-easy-returns-refunds-for-woocommerce/)

## Description

**UDX Easy Returns & Refunds for WooCommerce** adds a complete returns workflow 
to WooCommerce. Customers can request returns from My Account, guests can verify
an order by email code, and store managers can review requests from a dedicated 
WooCommerce admin screen.

The plugin is built for stores that need a practical RMA-style process, configurable
EU withdrawal information, secure uploads, partial returns, status notes and clear
customer communication.

#### Main Features

 * **Return, refund, exchange and withdrawal requests** – customers can choose the
   request type that matches their case.
 * **Guest order returns** – guests verify an order with Order ID, billing email
   and a one-time email code.
 * **My Account integration** – logged-in customers can start returns and view request
   history from a WooCommerce account endpoint.
 * **Partial returns** – customers can choose specific order items and quantities.
 * **Shipping refund option** – store owners can allow customers to request shipping
   cost refunds.
 * **File uploads** – optional evidence uploads with server-side file type, size
   and ownership checks.
 * **Bundle product support** – bundled products can be handled as one returnable
   bundle, with bundled children displayed below the parent item.
 * **WooCommerce Subscriptions support** – subscription orders and subscription 
   line items can be included or excluded with a setting.
 * **Configurable button colors** – primary, hover and text colors can be adjusted
   from the settings screen.
 * **Admin dashboard** – manage requests, statuses and internal/customer notes from
   WooCommerce admin.
 * **Order metabox** – see related return requests directly on the WooCommerce order
   screen.
 * **Email notifications** – verification codes, submission confirmations and status
   updates.
 * **EU withdrawal support** – configurable return period, withdrawal notice, policy
   text and exclusions for digital products or categories.
 * **HPOS compatible** – declares compatibility with WooCommerce High-Performance
   Order Storage.
 * **No jQuery dependency** – frontend and admin interactions use vanilla JavaScript.
 * **Translation ready** – strings are internationalized and a Polish translation
   file is included.

#### Security and Data Handling

The plugin was reviewed with WordPress.org expectations in mind and includes:

 * Nonce verification on AJAX actions.
 * WooCommerce admin capability checks for management actions.
 * Sanitization with `wp_unslash()`, `sanitize_text_field()`, `sanitize_textarea_field()`,`
   sanitize_email()`, `absint()` and related WordPress APIs.
 * Escaping of frontend, admin and email output.
 * Guest verification codes stored as hashes in transients.
 * Rate limiting for verification code requests and uploads.
 * Anti-enumeration responses for guest order verification.
 * Guest sessions stored in transients and bound to the requester IP.
 * Secure HttpOnly SameSite guest cookie for verified sessions.
 * Upload validation for allowed extensions and MIME types: JPG, PNG, WebP, GIF 
   and PDF.
 * Upload ownership metadata, so users and guests can only attach files they uploaded.
 * Daily cleanup of orphaned private evidence uploads.
 * Scheduled hook cleanup on uninstall, with optional full data cleanup controlled
   from settings.
 * A `phpcs.xml.dist` ruleset for WordPress Coding Standards, PHP 7.4+ and WooCommerce
   capability awareness.

#### Settings

Store owners can configure:

 * Return request page.
 * Optional data deletion when the plugin is deleted.
 * Return period in days.
 * Eligible WooCommerce order statuses.
 * Return reasons.
 * Return shipping address (sent to the customer once a request is approved).
 * Admin notification email.
 * Auto-approval for new requests.
 * Auto-completing a return request when its order reaches a chosen status (for 
   warehouse/OMS integrations such as BaseLinker).
 * Customer cancellation of pending requests.
 * Partial item and quantity returns.
 * Shipping refund requests.
 * Evidence uploads.
 * Guest access.
 * Verification code lifetime.
 * Maximum verification code requests per hour.
 * WooCommerce Subscriptions support.
 * Bundle product support.
 * Primary button color, hover color and text color.
 * EU withdrawal notice.
 * Custom return policy text.
 * Digital/downloadable product exclusion.
 * Product category exclusions.

#### EU Withdrawal and Consumer Rights

This plugin helps store owners present and record a clear return/withdrawal process.
It includes a configurable 14-day default withdrawal period, an EU notice on the
return form, request timestamps and status history.

Legal requirements can differ by country, product type and business model. Store
owners should review their final policy text with a qualified legal advisor.

#### How Guest Access Works

 1. A guest opens the Return Request page.
 2. They enter the Order ID and billing email address.
 3. The plugin sends a one-time verification code if the order and email match.
 4. The guest enters the code and receives a temporary verified session.
 5. The guest can submit a return request for that order.
 6. The session is destroyed after successful submission or when it expires.

#### Supported Product Types

The plugin works with standard WooCommerce order items and includes optional logic
for subscription products and common bundle product structures, including WooCommerce
Product Bundles-style metadata, WPC Smart Bundles, YITH bundles and Easy Product
Bundles-style parent/child metadata.

Bundle children are not returned separately when a bundle parent represents the 
group. The return form shows the bundle as one selectable item and displays included
products below it.

#### Development Standards

The plugin includes a `phpcs.xml.dist` configuration and has been checked against
WordPress Coding Standards. Development checks used during preparation include PHP
linting, JavaScript syntax checks and PHPCS with WPCS/PHPCompatibilityWP tooling.

#### Support

If this plugin helps your store, you can support the work here: https://buymeacoffee.
com/traskowski

## Screenshots

[⌊Guest verification form.⌉⌊Guest verification form.⌉[

Guest verification form.

[⌊Return request form with item, quantity, reason, declaration and upload controls.⌉⌊
Return request form with item, quantity, reason, declaration and upload controls
.⌉[

Return request form with item, quantity, reason, declaration and upload controls.

[⌊My Account return requests list.⌉⌊My Account return requests list.⌉[

My Account return requests list.

[⌊Single return request view in My Account.⌉⌊Single return request view in My Account
.⌉[

Single return request view in My Account.

[⌊WooCommerce admin return requests dashboard.⌉⌊WooCommerce admin return requests
dashboard.⌉[

WooCommerce admin return requests dashboard.

## Blocks

This plugin provides 1 block.

 *   UDX Return Form

## Installation

 1. Upload the `udx-easy-returns-refunds-for-woocommerce` folder to `/wp-content/plugins/`.
 2. Activate the plugin through the WordPress Plugins screen.
 3. Go to **WooCommerce > Returns Settings** and review the options.
 4. The plugin creates a Return Request page with the `[udxretwc_return_form]` shortcode
    on activation.
 5. You can also add the UDX Return Form block manually to another page.

## FAQ

### Does this plugin require WooCommerce?

Yes. WooCommerce 7.0 or higher is required.

### Does it process refunds automatically?

The plugin never moves money on its own. A store manager reviews each request and
processes the refund from the return request screen.

There is an optional auto-approval setting, but it only changes the request status
to approved — it does not refund any payment.

When a manager processes a refund, they can also choose to refund the payment. If
the order’s payment gateway supports API refunds, the amount is returned through
the gateway automatically; otherwise WooCommerce records the refund and the payment
is returned manually. The return request and order statuses are updated accordingly.

### Can guests request returns without creating an account?

Yes. Guests verify ownership with Order ID, billing email and a one-time code sent
by email.

### Can customers return only part of an order?

Yes. Store owners can enable partial returns so customers can select specific items
and quantities.

### Can customers upload photos?

Yes, if uploads are enabled. The plugin accepts JPG, PNG, WebP, GIF and PDF files
up to 5 MB each, with a maximum of 3 files per request.

### How are bundle products handled?

When bundle support is enabled, bundle groups are represented by one selectable 
bundle item. Child products are displayed as included items and are not returned
separately.

### Is WooCommerce Subscriptions supported?

Yes. Store owners can enable or disable return eligibility for subscription orders
and subscription line items.

### Is it compatible with WooCommerce HPOS?

Yes. The plugin declares compatibility with WooCommerce High-Performance Order Storage.

### How should I secure the uploads folder for file uploads?

Uploaded evidence files are validated by file extension and by real MIME type (the
client-reported type is not trusted), are size-limited, are bound to the uploading
customer or guest, are stored as private attachments, and executable types such 
as PHP are rejected.

As an additional, strongly recommended hardening step, configure your web server
so the WordPress uploads directory cannot execute PHP or other scripts:

 * On Apache, add an `.htaccess` file in `wp-content/uploads/` that denies access
   to PHP files (for example, a `<Files *.php>` block with `Require all denied`).
 * On NGINX, add a location rule that denies requests matching `\.php$` under `wp-
   content/uploads/`.

This is a general WordPress security best practice and protects your entire site,
not only this plugin. If you extend the allowed upload types with the provided filters,
never allow executable extensions or MIME types.

### Does the plugin provide hooks for developers?

Yes. The plugin exposes actions and filters across its lifecycle so you can extend
behavior without modifying core files.

Actions:

 * `udxretwc_before_return_request_created` ( $data, $order ) — before a request
   is created.
 * `udxretwc_return_request_created` ( $request_id, $data ) — after a request is
   created.
 * `udxretwc_return_request_submitted` ( $request_id ) — after a request is fully
   submitted (triggers emails).
 * `udxretwc_return_status_changed` ( $request_id, $new_status, $old_status ) — 
   on any status change.
 * `udxretwc_status_changed_{status}` ( $request_id, $old_status ) — dynamic, e.
   g. `udxretwc_status_changed_approved`.
 * `udxretwc_note_added` ( $request_id, $note, $author ) — after any note is added.
 * `udxretwc_admin_note_added` ( $request_id, $note ) — after an admin note is added.
 * `udxretwc_return_request_cancelled` ( $request_id ) — after a customer cancels
   a request.
 * `udxretwc_before_refund_processed` ( $request_id, $order, $refund_args ) — before
   the WooCommerce refund is created.
 * `udxretwc_refund_processed` ( $request_id, $refund, $order ) — after the refund
   is created.
 * `udxretwc_file_uploaded` ( $attachment_id, $upload_owner ) — after an evidence
   file is uploaded.
 * `udxretwc_send_verification_code` ( $email, $code, $order ) — when a guest verification
   code is issued.
 * `udxretwc_before_return_form` / `udxretwc_after_return_form` ( $order, $is_guest)—
   around the return form.
 * `udxretwc_before_my_account_requests` / `udxretwc_after_my_account_requests` (
   $requests ) — around the My Account list.
 * `udxretwc_before_template` / `udxretwc_after_template` ( $template, $args ) —
   around any plugin template.
 * `udxretwc_settings_page_notices` () — fires at the top of the plugin’s WooCommerce
   Settings  Returns tab, before any fields; useful for adding your own integration
   notices (e.g. a warehouse/OMS mapping note) without modifying this plugin.

Filters:

 * `udxretwc_create_request_data` ( $data ) — modify request data before saving.
 * `udxretwc_new_request_default_status` ( $status, $data ) — set the initial status.
 * `udxretwc_can_change_status` ( $allowed, $request_id, $new_status, $old_status)—
   block status transitions.
 * `udxretwc_return_period_days` ( $days, $order ) — per-order return window.
 * `udxretwc_item_is_returnable` ( $is_returnable, $item, $order ) — exclude specific
   items.
 * `udxretwc_returnable_items` ( $items, $order ) — adjust the full list of returnable
   items.
 * `udxretwc_return_reasons` ( $reasons, $order ) — modify the available reasons.
 * `udxretwc_return_statuses` ( $statuses ) — register or relabel statuses.
 * `udxretwc_request_type_labels` ( $labels ) — modify request type labels.
 * `udxretwc_is_order_eligible` ( $eligible, $order ) — final eligibility check.
 * `udxretwc_validate_submission` ( $error, $data, $order ) — add custom submission
   validation (return WP_Error to reject).
 * `udxretwc_can_cancel_request` ( $can_cancel, $request_id, $user_id ) — control
   cancellation.
 * `udxretwc_max_upload_size` ( $bytes ) — maximum upload size.
 * `udxretwc_allowed_upload_extensions` ( $extensions ) — allowed file extensions.
 * `udxretwc_allowed_upload_mimes` ( $mimes ) — allowed MIME types.
 * `udxretwc_refund_line_items` ( $line_items, $request_id, $order ) — adjust refund
   line items.
 * `udxretwc_refund_total` ( $refund_total, $request_id, $order ) — adjust the refund
   total.
 * `udxretwc_restock_items` ( $restock, $request_id, $order ) — control restocking.
 * `udxretwc_refund_args` ( $refund_args, $request_id, $order ) — adjust wc_create_refund()
   arguments.
 * `udxretwc_should_mark_order_refunded` ( $should, $order, $request_id ) — control
   order status update.
 * `udxretwc_template_path` ( $path, $template, $args ) — override a template path.
 * `udxretwc_template_args` ( $args, $template ) — modify template arguments.

For security reasons, some values are intentionally not filterable, including verification
code length and lifetime, the maximum number of verification attempts, and upload
rate limits.

### How do I integrate with BaseLinker or another warehouse/OMS system?

Go to WooCommerce  Settings  Returns  Automation and pick a WooCommerce order status
under “Auto-Complete on Order Status”. Whenever an order reaches that status, any
Approved return request linked to it is automatically moved to Completed — no code
required.

This works with BaseLinker (or any other warehouse/OMS) without an extra API token
or webhook: BaseLinker already pushes order status changes into WooCommerce through
the standard WooCommerce REST API once you map its own “returned” status to a WooCommerce
order status in its own panel. If you don’t already have a suitable WooCommerce 
order status for this, register a dedicated one first with `register_post_status()`
plus the `wc_order_statuses` filter, then select it here.

The actual money refund stays a deliberate, manual step — use the “Process Refund”
button on the return request detail screen.

Need more than a single global target status? Use the `udxretwc_settings_page_notices`
action to add your own notice to this settings screen, or build fully custom logic
on the standard WooCommerce `woocommerce_order_status_changed` hook combined with
the plugin’s `_udxretwc_order_id` post meta and `UDXRETWC_Post_Types::update_status()`.

### Can the description be translated on WordPress.org?

Yes. The plugin’s source language is English (text domain `udx-easy-returns-refunds-
for-woocommerce`). Translations, including the readme description, are managed through
translate.wordpress.org. A Polish translation is bundled with the plugin as a fallback
until directory translations are complete.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“UDX Easy Returns & Refunds for WooCommerce” is open source software. The following
people have contributed to this plugin.

Contributors

 *   [ Dominik ](https://profiles.wordpress.org/trasek/)

[Translate “UDX Easy Returns & Refunds for WooCommerce” into your language.](https://translate.wordpress.org/projects/wp-plugins/udx-easy-returns-refunds-for-woocommerce)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/udx-easy-returns-refunds-for-woocommerce/),
check out the [SVN repository](https://plugins.svn.wordpress.org/udx-easy-returns-refunds-for-woocommerce/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/udx-easy-returns-refunds-for-woocommerce/)
by [RSS](https://plugins.trac.wordpress.org/log/udx-easy-returns-refunds-for-woocommerce/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.0.3

 * Added: built-in “Auto-Complete on Order Status” setting (Settings  Returns  Automation)—
   automatically completes Approved return requests when their linked order reaches
   a chosen WooCommerce order status, for warehouse/OMS integrations such as BaseLinker.
   No code required.
 * Changed: the BaseLinker FAQ entry now documents this built-in setting as the 
   primary path, with the hook-based approach kept as an advanced/custom option.

#### 1.0.2

 * Added: `udxretwc_settings_page_notices` action, fired at the top of the Settings
   Returns tab, for adding custom integration notices without modifying the plugin.
 * Added: “Buy Me a Coffee” link on the Settings  Returns screen and on the admin
   review-request notice.
 * Added: FAQ entry documenting a BaseLinker/warehouse-system integration pattern
   built entirely on standard WooCommerce order-status hooks.

#### 1.0.1

 * Fixed: admin and frontend CSS/JS assets still used the old `erfwc` prefix after
   the `udxretwc` rename, breaking admin AJAX (status/notes/refund/rate prompt),
   the frontend return form (guest verification, item selection, upload, cancel),
   all plugin styling and the block editor registration.
 * Fixed: stale developer-hook and shortcode references in the readme.
 * Added: “Return Approved – Shipping Address” customer email plus a return shipping
   address setting.
 * Bumped version to force browsers to fetch the corrected CSS/JS instead of stale
   cached copies.

#### 1.0.0

 * Initial release.
 * Added guest order verification via secure email code.
 * Added My Account return requests endpoint.
 * Added WooCommerce admin dashboard, status changes and notes.
 * Added return, refund, exchange and EU withdrawal request types.
 * Added partial returns with item quantity selection.
 * Added optional shipping refund requests.
 * Added evidence uploads with validation and orphan cleanup.
 * Added WooCommerce Subscriptions compatibility option.
 * Added bundle product compatibility option with whole-bundle return behavior.
 * Added configurable button colors.
 * Added EU withdrawal notice, policy text and product/category exclusions.
 * Added HPOS compatibility declaration.
 * Reworked frontend and admin JavaScript to vanilla JS.
 * Added security hardening for nonces, sanitization, escaping, guest sessions, 
   transient cleanup and uploads.
 * Added developer actions and filters across the request, status, refund, upload,
   form and template lifecycle.
 * Added filters to control upload size and allowed upload types.
 * Added WordPress Coding Standards PHPCS configuration.
 * Added Polish translation files.

## Meta

 *  Version **1.0.3**
 *  Last updated **1 day ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.0.2**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [refunds](https://wordpress.org/plugins/tags/refunds/)[returns](https://wordpress.org/plugins/tags/returns/)
   [RMA](https://wordpress.org/plugins/tags/rma/)[withdrawal](https://wordpress.org/plugins/tags/withdrawal/)
   [woocommerce](https://wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://wordpress.org/plugins/udx-easy-returns-refunds-for-woocommerce/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/udx-easy-returns-refunds-for-woocommerce/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/udx-easy-returns-refunds-for-woocommerce/reviews/)

## Contributors

 *   [ Dominik ](https://profiles.wordpress.org/trasek/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/udx-easy-returns-refunds-for-woocommerce/)

## Donate

Would you like to support the advancement of this plugin?

 [ Donate to this plugin ](https://buymeacoffee.com/traskowski)