Self-Service Refunds for WooCommerce – Documentation
Getting Started
↑ Back to topRequirements
↑ Back to top- WordPress 6.0 or higher
- WooCommerce 5.0 or higher
- PHP 7.4 or higher
Installation
↑ Back to top- Upload the
self-service-refundsfolder to the/wp-content/plugins/directory, or install directly through the WordPress plugin screen. - Activate the plugin through the Plugins screen in WordPress.
- Navigate to WooCommerce > Settings > Refunds to configure the plugin.
Quick Start
↑ Back to top- Go to WooCommerce > Settings > Refunds.
- Enable “Self-Service Refund Requests”.
- Set a refund time limit (e.g., 30 days).
- Add refund reasons for customers to choose from.
- Optionally enable automatic refund processing.
- Save your settings.
Customers will now see a “Request Refund” button on their orders in My Account > Orders.
Configuration
↑ Back to topGeneral Settings
↑ Back to topNavigate to WooCommerce > Settings > Refunds to access all plugin settings.
| Setting | Description | Default |
|---|---|---|
| Enable Self-Service Refund Requests | Master toggle for the entire feature | Disabled |
| Enable Line-Item Refunds | Allow customers to refund individual line items (partial refunds) | Disabled |
| Refund Time Limit | Number of days after purchase during which refunds can be requested (1-365) | 30 days |
| Enable Automatic Refunds | Process refunds automatically through the payment gateway | Disabled |
| Auto-Refund Limit | Maximum number of automatic refunds per customer per interval (0 = unlimited) | 0 |
| Auto-Refund Limit Interval | Time interval for the auto-refund limit (day, week, month, year) | Month |
| Enable Guest Refunds | Allow non-registered customers to request refunds via a dedicated form | Disabled |
| Require Refund Reason | Customers must select a reason when requesting a refund | Disabled |
| Allow Re-Request After Rejection | Let customers resubmit a refund request after it has been rejected | Disabled |
| Refund Policy Page | Link to your refund policy page, shown during the refund request process | None |
Refund Reasons
↑ Back to topRefund reasons are the options shown to customers when they request a refund (if “Require Refund Reason” is enabled).
Managing reasons:
- Go to WooCommerce > Settings > Refunds > Refund Reasons tab.
- Click Add Reason to create a new reason.
- Enter the reason text (e.g., “Item arrived damaged”, “Changed my mind”, “Wrong item received”).
- Drag and drop reasons to reorder them.
- Click the trash icon to delete a reason.
Reasons are displayed to customers in the order you set.
Decline Message Presets
↑ Back to topDecline presets are reusable rejection messages that admins can select when rejecting a refund request.
Managing presets:
- Go to WooCommerce > Settings > Refunds > Decline Presets tab.
- Click Add Preset to create a new message template.
- Enter a heading (e.g., “Outside Refund Window”) and the message body.
- The message body supports rich text (HTML) for formatting.
- Drag and drop to reorder presets.
When rejecting a request, admins can select a preset or write a custom message.
Refund Rules
↑ Back to topRules allow you to automate refund processing decisions based on order conditions.
See the Rules Engine section for full details.
Customer Experience
↑ Back to topLogged-In Customers
↑ Back to topRegistered customers can request refunds from their My Account > Orders page:
- Navigate to My Account > Orders.
- Click the Request Refund button next to an eligible order.
- Follow the multi-step refund form.
- Track the refund status on the order details page.
The “Request Refund” button only appears for orders that:
- Are within the configured refund time limit.
- Do not already have a pending refund request.
- Are in a refundable order status.
Guest Customers
↑ Back to topIf “Enable Guest Refunds” is turned on, guest customers can request refunds through a dedicated form. See Guest Refund Form for setup instructions.
Guest verification requires three matching pieces of information:
- Email address used for the order
- Order number
- Order date
Refund Request Steps
↑ Back to topThe refund request process follows these steps:
- Select Refund Type – Choose between a full order refund or a partial (line-item) refund.
- Select Items (partial refunds only) – Choose which items and quantities to refund.
- Select Reason (if required) – Choose a refund reason from the configured list.
- Review & Confirm – Review the refund details and submit the request.
Request Cancellation
↑ Back to topCustomers can cancel a pending refund request before it is processed:
- A “Cancel Refund Request” option appears on orders with pending requests.
- Cancellation restores the order to its previous status.
- Cancelled requests are recorded in the order notes.
Admin Workflow
↑ Back to topReviewing Requests
↑ Back to topWhen a customer submits a refund request:
- The order status changes to Refund Requested.
- An admin notification email is sent (if enabled).
- A notice appears in the WordPress admin showing the count of pending requests.
- The order appears with the “Refund Requested” status in the orders list.
Approving Refunds
↑ Back to topAdmins can approve refund requests from two locations:
From the Orders List:
- Click the approve (checkmark) action button next to the order.
- If the payment gateway supports refunds, the refund is processed automatically.
From the Order Detail Page:
- Click the Approve & Refund button in the order actions area.
- A confirmation dialog appears before processing.
When approved:
- If automatic refunds are enabled and the gateway supports it, the refund is processed immediately.
- An order note is added documenting the approval.
- The order status is updated accordingly.
Rejecting Refunds
↑ Back to topAdmins can reject refund requests from two locations:
From the Orders List:
- Click the reject (X) action button next to the order.
From the Order Detail Page:
- Click the Reject Refund button.
- A modal appears to select a decline message preset or write a custom message.
When rejected:
- The customer receives a rejection email with the decline message (if configured).
- An order note is added with the rejection reason.
- The order status reverts to its previous status.
- If “Allow Re-Request After Rejection” is enabled, the customer can submit a new request.
Order Status
↑ Back to topThe plugin adds a custom order status:
- Refund Requested (
wc-refund-requested) – Applied when a customer submits a refund request.
This status appears in the orders list with its own color coding and can be filtered like any other WooCommerce order status.
Rules Engine
↑ Back to topThe rules engine lets you automate refund processing based on conditions. Rules are evaluated in order, and the first matching rule determines the action.
Creating Rules
↑ Back to top- Go to WooCommerce > Settings > Refunds > Refund Rules tab.
- Click Add Rule.
- Enter a rule name (e.g., “Auto-approve digital products”).
- Select an action: Process Automatically or Manual Review.
- Add one or more conditions.
- Enable or disable the rule with the toggle.
- Save the rule.
Available Conditions
↑ Back to top| Condition | Description | Operators |
|---|---|---|
| User Role | Customer’s WordPress role | is, is not |
| Product Category | Product belongs to a category | is, is not |
| Product Tag | Product has a specific tag | is, is not |
| Product Type | Simple, variable, grouped, etc. | is, is not |
| Payment Method | How the order was paid | is, is not |
| Shipping Zone | The shipping zone of the order | is, is not |
| Shipping Method | The shipping method used | is, is not |
| Billing Country | Customer’s billing country | is, is not |
| Shipping Country | Customer’s shipping country | is, is not |
| Brand | Product brand (requires WooCommerce Brands) | is, is not |
| Order Status | Current order status | is, is not |
| Cart Item Count | Number of items in the order | greater than, less than, equal to |
| Cart Quantity | Total quantity of items | greater than, less than, equal to |
| Cart Value | Total order value | greater than, less than, equal to |
Rule Priority
↑ Back to top- Rules are evaluated from top to bottom.
- The first matching rule determines the action.
- Drag and drop rules to change their priority.
- If no rules match, the default behavior applies (manual review unless automatic refunds are globally enabled).
Rule Actions
↑ Back to top| Action | Description |
|---|---|
| Process Automatically | Refund is processed through the payment gateway without admin intervention |
| Manual Review | Request is queued for admin approval/rejection |
Abuse Prevention
↑ Back to topRefund Limits
↑ Back to topSet a maximum number of automatic refunds per customer per time interval:
- Go to WooCommerce > Settings > Refunds.
- Enable Automatic Refunds.
- Set Auto-Refund Limit (e.g., 3).
- Set Auto-Refund Limit Interval (e.g., month).
When a customer exceeds their limit, the request is escalated to manual review instead of being auto-processed. An escalation email is sent to the admin.
Per-User Controls
↑ Back to topManage refund behavior for individual customers from their user profile (Users > Edit User):
| Control | Description |
|---|---|
| Disable Automatic Refunds | All requests from this user require manual review |
| Block Refund Requests | This user cannot submit refund requests at all |
| Custom Refund Limit | Override the global limit for this specific user |
| Reset Counter | Manually reset the user’s refund counter |
The current refund counter and period are displayed on the user profile for reference.
Non-Refundable Products
↑ Back to topMark specific products as non-refundable:
- Edit a product in Products > Edit Product.
- In the product data panel, check Non-Refundable.
- For variable products, you can mark individual variations as non-refundable.
Non-refundable items:
- Cannot be selected for line-item refunds.
- Are excluded from full order refund calculations (the refund amount is adjusted).
- Show a clear indicator to customers during the refund process.
Email Notifications
↑ Back to topThe plugin adds four email notifications to WooCommerce, manageable from WooCommerce > Settings > Emails:
| Recipient | Trigger | |
|---|---|---|
| Refund Request Confirmation | Customer | When a refund request is submitted |
| New Refund Request | Admin | When a refund request needs review |
| Refund Escalation | Admin | When auto-processing falls back to manual review |
| Refund Request Rejected | Customer | When a request is rejected (includes decline message) |
Each email can be:
- Enabled or disabled independently.
- Customized with subject line and content.
- Managed through the standard WooCommerce email settings interface.
Guest Refund Form
↑ Back to topShortcode
↑ Back to topPlace the guest refund form anywhere using the shortcode:
[ssr_guest_refund]
Optional attributes:
| Attribute | Description | Default |
|---|---|---|
title | Form heading text | “Request a Refund” |
show_title | Show or hide the form title | true |
Example:
[ssr_guest_refund title="Return an Order" show_title="true"]
Gutenberg Block
↑ Back to topThe plugin includes a native Gutenberg block:
- In the block editor, search for Guest Refund Form.
- Add the block to your page.
- Customize the appearance using the block settings panel:
- Background color
- Border color and width
- Border radius
- Padding
The block renders the same multi-step refund form as the shortcode.
Guest verification process:
- Customer enters their email, order number, and order date.
- The system verifies all three match an existing order.
- If verified, the standard refund request flow begins.
Analytics
↑ Back to topThe plugin adds a Refund Reasons report to WooCommerce > Analytics.
Accessing the Report
↑ Back to top- Navigate to WooCommerce > Analytics > Refund Reasons.
- Use the date picker to select a date range.
- Filter by refund reason, product, order status, or request status.
Available Data
↑ Back to top- Refund reason distribution
- Request counts by status (approved, rejected, pending)
- Product-level refund data
- Trend analysis over time
The report integrates with WooCommerce’s standard analytics interface, using the same date picker, filters, and export functionality.
FAQ
↑ Back to topDoes this plugin process refunds automatically?
↑ Back to topOnly if you enable automatic refunds in the settings and the payment gateway supports programmatic refunds. Otherwise, all requests are queued for manual admin approval.
What happens if a payment gateway doesn’t support automatic refunds?
↑ Back to topThe request is escalated to manual review. An escalation email is sent to the admin, and the admin can process the refund manually through WooCommerce’s standard refund interface.
Can I restrict refunds for specific products?
↑ Back to topYes. Edit any product and check the “Non-Refundable” option. For variable products, you can mark individual variations as non-refundable.
Can guest customers request refunds?
↑ Back to topYes, if you enable “Guest Refunds” in the settings. Guest customers verify their identity with their email, order number, and order date. You can place the guest form using a shortcode or Gutenberg block.
How do refund rules work?
↑ Back to topRules are evaluated in order (top to bottom). The first rule whose conditions match the order determines whether the refund is auto-processed or sent for manual review. If no rules match, the global setting applies.
Can customers cancel a refund request?
↑ Back to topYes. Customers can cancel a pending refund request from their order details page before an admin takes action.
Can a rejected customer re-request a refund?
↑ Back to topOnly if you enable “Allow Re-Request After Rejection” in the settings. This is disabled by default.
What order statuses support refund requests?
↑ Back to topCustomers can request refunds on orders with statuses that indicate completion or processing (e.g., Completed, Processing). The exact eligible statuses depend on your WooCommerce configuration.
Is this compatible with HPOS (High-Performance Order Storage)?
↑ Back to topYes. The plugin is fully compatible with WooCommerce’s High-Performance Order Storage.
Where can I see refund request history?
↑ Back to topRefund request history is recorded as order notes on the individual order. Admins can view the full timeline on the order detail page. Customers see a simplified version on their order detail page in My Account.