Withdrawal form and button

This plugin adds a full-featured and secure customer withdrawal system to your WooCommerce store.

1. Installing the plugin

Plugin MakeMeHappy Withdrawal Form It is available for free in the official WordPress.org directory. You can install it directly from your website’s admin panel, without a registration number or license activation. You need an active WooCommerce installation to use it.

  1. In the WordPress admin panel, open Plugins → Add New.
  2. Enter the following in the search field makemehappy-resignation-form.
  3. For the plugin MakeMeHappy Withdrawal Form From the Author MakeMeHappy Click on Install Now.
  4. Once the installation is complete, click Activate.
  5. You can find the settings in WooCommerce → Cancellation of the Contract.

You can also install the plugin Download from WordPress.org as a ZIP file and upload via Plugins → Add New → Upload a Plugin.

Are you using the original paid version? The version from WordPress.org is a standalone plugin. Settings, saved requests, and original shortcodes will not be automatically transferred. Be sure to create a backup before switching, and do not activate both versions at the same time.

2. Basic form setup and insertion

The basis of operation is placing the shortcode on a dedicated page.

  1. Create a new page in WordPresse (for example, titled „Withdrawal“).
  2. Insert the shortcode into the page content:

    Formular na odstupenie od zmluvy

  3. Publish the page.
Screenshot 2026 09 22 123606

3. Configuration (Admin Settings)

All settings can be found in the WordPress administration menu WooCommerce -> Withdrawal. The administration interface is divided into two tabs: Settings a Withdrawals (list of applications received).

On the cards Settings you can customize:

  • URL of the form page: Enter the URL of the page you created in the previous step.
  • Request zip code: Enable additional customer verification via zip code from the billing address. (Recommended for security reasons).
  • Withdrawal period: The number of days (normally 14) during which the customer has the right to return the goods. The time is calculated from the date of delivery (if recorded), otherwise from the completion of the order.
  • Duplication of requests: If this option is enabled, the customer will not be able to send multiple requests for the same order.
  • Customer privacy: This feature allows you to mask the customer's last name after the form is submitted. Instead of "Dáša Testovacia," "Dáša Te****ia" will be displayed.
  • Allowed order statuses: Select the states (e.g. In Progress, Completed) for which the withdrawal will be allowed at all. If the order has a different status, the form will not load and the button will not appear.
  • Insert in email: Select the statuses (e.g., Processing, Completed) for which the button will be inserted in the email below the table. If the order has a different status, the button is not inserted.
  • Email templates: Here you can customize the subject and text of automated emails for both the admin and the customer.
    • Available variables: {order_id}, {order_number}, {order_internal_id}, {email}, {iban}, {return_mode}, {items}, {reason}, {date}, {request_text}, {customer_first_name}, {customer_last_name}, {customer_full_name}, {billing_phone}, {billing_company}, {order_total}, {payment_method}, {order_date}
Screenshot 2026-09-22 123714
Screenshot 2026 06 17 155753
Screenshot 2026 06 17 155704

Email confirmation for the customer

Screenshot 2026 05 26 071732

4. How it works from the customer's point of view

The customer has two options to access the form:

A. Directly via the form page:

  1. The customer enters the order number, their email and zip code.
  2. The plugin verifies the data, order status and validity of the deadline in the background. (The system includes a rate-limit against guessing data).
  3. If everything is OK, a selection of items will be displayed. The customer can choose to return the entire order or check out only specific products and their quantities.
  4. For selected payment methods, the form will request the IBAN for the refund.
  5. Once sent, the system will recalculate the estimated refund amount.
Screenshot 2026 04 10 194725
Screenshot 2026 04 10 194832

B. Through the client area (My Account): In the order list (/my-account/orders/), a button will automatically appear for eligible orders „Withdraw from the contract“. For security reasons, the link in the button is protected by a cryptographic token, so no email or sensitive order key. Once clicked, the customer is redirected to a form that is already pre-populated and ready for selecting items to return.

Screenshot 2026 04 10 194911

5. Management of requests (Withdrawals)

After the customer submits the form, two things happen:

  1. Both you and the customer will receive a confirmation email with the details of the request.
  2. The request is saved in the system and assigned as a note to the order.

You can view all received applications at any time in the administration tab Withdrawals (WooCommerce -> Withdrawal -> Withdrawals). From this list, you can quickly click directly to the details of a specific order.

Screenshot 2026 04 10 194943

6. For developers: integration into emails and templates

If you are using external email plugins or customizing custom templates, you can generate a link to a secure form for a specific order in two ways:

Using the PHP helper function:

wco_get_withdrawal_url($order_id)

Using Shortcode (within other plugins if they support shortcode processing):

[withdrawal_link order_id="123" label="Withdraw"]

Localization note: The plugin is fully ready for translation, by default it includes Slovak (en_SK) and Czech (en_CZ) the location in the folder languages/.

7. Support for custom order numbering

The plugin also supports custom order numbering.

Withdrawal period – how it is calculated

The plugin calculates the withdrawal period based on the order reference date. The plugin always uses the first available date in the following order:

  1. Date received from order meta
  2. Order completion date (status: „Completed“)
  3. Order payment date
  4. Order creation date

What does „delivery date from order meta“ mean?“

This is not a standard order status. It is a specific value stored in the order's metadata (usually recorded by a shipping plugin, fulfillment plugin, or custom integration).
If that information is not available, the plugin will automatically move on to the next date in the sequence.

Is „Processed“ the same as "Delivered"?

No.
The „Completed“ status is used only as a fallback source for the date if the delivery date is not available in the metadata.

How is the end of the period calculated?

The number of days specified in the „Withdrawal period (days)“ field is added to the reference date.
If the current time is after this deadline, cancellation is no longer available.

Default value and limits

The default period is 14 days.
In the administration section, you can set a range of 1 to 365 days.

Practical example

If the time limit is set to 14 days:

  • The order has a target delivery date of March 1 → The deadline is calculated from March 1.
  • If the delivery date is missing but the order was completed on March 2 → the deadline is calculated from March 2.
  • If the completion date is also missing, the payment date will be used
  • If payment is also missing, the order creation date will be used

In this plugin, the „delivery date from order meta“ is a value stored in the order's meta fields, which the plugin reads directly from the order database in the following order:

_date_delivered
_delivery_date
_delivered_at
date_delivered
delivery date
delivered_at
_packet_delivered_at
packet_delivered_at
_dpd_delivered_at
dpd_delivered_at

8. Confirmation of Receipt of Returned Goods

Since version 1.1.7 You can confirm receipt of the returned merchandise in the plugin's admin panel. After confirmation, you can choose whether to send the customer an email—the content of which can be customized.

Screenshot 2026 06 17 160106
Screenshot 2026 06 17 160319

Leave a Reply

Your email address will not be published. Required fields are marked *