A customer emails you a photo, you email back asking for the order number, they reply three days later — meanwhile the return window’s ticking.

The Return & Exchange RMA plugin turns that whole exchange into a self-service flow your customer can complete in a couple of minutes, right from their own account.

The vocabulary

RMAReturn Merchandise Authorization — the whole request/approval flow
Returncustomer sends a product back for a refund
Exchangecustomer swaps a product for a different one
Guest lookupacting on an order without a store account

A customer opens the order in their account (or, for guests, looks it up by order number and email), picks which items they’re returning or exchanging and why, and submits. You review it from WooCommerce’s own order screen and accept or decline — no spreadsheets, no email threads.

What you control as the store owner

01

Return & exchange, per product

Turn eligibility on per product — some items returnable, some exchangeable, some neither.

02

Refund your way

Customers choose a store coupon or you settle manually — either way, you decide which options are offered.

03

Order amount & time limits

Only offer returns above a minimum order value, and only within a window you set — days since purchase.

04

Status & category rules

Restrict which order statuses qualify, and exclude entire product categories (final-sale items, for instance) outright.

Every request gets its own status — return-requested, exchange-approved, and so on — so it shows up in your normal WooCommerce order list, not a separate inbox.

Cancel Order, done properly

Customers can cancel their own order too — but only while it’s genuinely cancellable (pending or failed, not something you’re already fulfilling), the same rule WooCommerce’s own core cancel feature uses. Click it, and you land back on your orders list with a clear confirmation, not a mystery.

No account? No problem

Look up the order

Order number plus the billing email — no login required.

Get straight to the form

A verified guest lands directly on their return/exchange request for that order.

Submit and wait

Same review flow as a logged-in customer — you approve or decline from the order screen.

Verified this release

Rebuilt for the WooCommerce you’re running today

This plugin’s core ideas haven’t changed since it first shipped — what’s changed is everything underneath, verified feature-by-feature against a current WordPress and WooCommerce install:

  • Guest lookup now actually completes — the request form it hands off to loads correctly end-to-end, not a dead link.
  • High-Performance Order Storage (HPOS) support — exchange orders now get a real, complete billing/shipping address under WooCommerce’s modern order storage.
  • PHP 8.3 compatible — no more deprecation warnings cluttering your logs.
  • Meaningfully more secure — every form now checks the request is genuine and that the order actually belongs to whoever’s acting on it, and photo attachments are verified by their real content, not just their filename.
  • The Return & Exchange settings screen now saves reliably no matter which tab you’re on when you hit Save.

Where this shows up

👕Apparel & sizing
📦Damaged in transit
🔁Wrong item shipped
🎁Gift exchanges
🛍️Guest checkouts
🧾Store-credit refunds

Works with the WooCommerce you’re already running

Classic or block-based storefront, HPOS on or off.

WordPress 4.0+ (tested to 7.1.1) · WooCommerce 3.5+ (tested to 11.1.1) · PHP 7.4+