xpay✦ Commerce
Directory
WooCommerce plugins
Purchase Contract Withdrawal Button for WooCommerce
Purchase Contract Withdrawal Button for WooCommerce
Adds a withdrawal button to WooCommerce My Account orders. Two-step submission with nonce, configurable cooling-off, automated emails.
Will this break my store?
What the WordPress.org registry says about keeping Purchase Contract Withdrawal Button for WooCommerce running.
Tested to 7.0.2
Tested against the WordPress branch in use today.10 days ago
7.4
Your host must be running at least this version.6.0
woocommerce
These must be installed and active first.1
A single maintainer. Worth knowing if the plugin is load-bearing for your store.Maintenance & trust
Scored on how Purchase Contract Withdrawal Button for WooCommerce is looked after — not on how many stores run it.
Maintenance
35 / 35WordPress compatibility
20 / 20Support responsiveness
Not enough dataMerchant satisfaction
Not enough dataListing transparency
10 / 10Ratings
No one has rated this plugin on WordPress.org yet. That is a statement about the ratings page, not about the plugin — plenty of well-kept plugins never collect them.
Purchase Contract Withdrawal Button for WooCommerce adds a clearly-labeled “Withdraw from purchase contract” button to each customer’s order detail page in WooCommerce My Account. It implements the two-step submission process required by EU consumer law: the customer clicks the button, reviews their order details, optionally provides a refund bank account and reason, and then explicitly confirms.
After submission:
- The order is moved to a configurable status (default: On hold)
- A note is added to the order with the customer’s reason and refund account
- The customer receives a confirmation email
- The store administrator receives a notification email with all submission details
Both emails are registered as standard WooCommerce email classes and can be customized in WooCommerce → Settings → Emails.
Legal context
This plugin is designed to help merchants comply with EU Directive 2023/2673, which requires online merchants to provide consumers with a direct online function to withdraw from a contract — the same way they could enter into it. In the Czech Republic, this obligation enters into force on 19 June 2026 under § 1830a of the Civil Code (the so-called “button amendment 2.0”). Similar transposition is required across all EU member states.
The plugin is not legal advice. Merchants remain responsible for ensuring their full implementation (including terms and conditions, refund processing, and goods return) complies with applicable law.
Features
- Two-step submission — button click → form with details → explicit confirmation
- Guest shortcode — optional
[pcwb_withdrawal_form]for non-logged-in customers (order number + billing email lookup, rate-limited) - Configurable cooling-off period — default 14 days, adjustable per store
- Date of delivery meta box — admin can record when the goods were received; the cooling-off period then runs from that date (legally correct under EU law)
- Configurable eligible statuses — choose which order statuses show the button
- Configurable post-submission status — typically On hold or Processing
- WooCommerce email integration — customer + admin emails as native WC_Email classes
- Admin overview — dedicated “Withdrawals” screen under WooCommerce: filter by pending/resolved, search, date range, CSV export, per-row and bulk “Mark as resolved”, and per-row and bulk delete of a withdrawal record (removes the withdrawal data from the order without deleting the order itself)
- Order actions — admins can submit a withdrawal on behalf of the customer (e.g. phone request) and mark requests resolved from the order edit screen
- Translatable — full text domain, .pot included, all 24 official EU languages bundled (Bulgarian, Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, German, Greek, Hungarian, Irish, Italian, Latvian, Lithuanian, Maltese, Polish, Portuguese, Romanian, Slovak, Slovenian, Spanish, Swedish)
- Theme-overridable templates — copy
templates/withdrawal-form.phportemplates/guest-lookup.phpinto your theme to customize - HPOS-compatible — works with WooCommerce’s High-Performance Order Storage
Filters and actions
pcwb_eligible_statuses— array of statuses where the button is shownpcwb_period_days— cooling-off period overridepcwb_period_reference_date($date, $order) — override the cooling-off reference datepcwb_new_status— order status applied after submissionpcwb_admin_recipient— admin email recipient overridepcwb_after_submit($order, $reason, $account, $source) — fires after a successful submission (source = customer|guest|admin)pcwb_after_resolve($order, $resolved_by_user_id) — fires when an admin marks a withdrawal resolvedpcwb_after_delete($order) — fires after an admin removes a withdrawal record from an order
In the customer’s My Account → Orders → individual order detail page, below the order table. It only appears when the order matches an eligible status and is within the configured cooling-off period.
No. Once a withdrawal is submitted, the button is replaced with a notice showing the submission date and a contact email.
No. The plugin records the customer’s intent to withdraw — it does not move money. Refunds are processed manually (or via your payment gateway) after the goods are received. The plugin notifies the admin via email so the merchant can follow up.
No. The button requires the customer to be logged in (their account must be linked to the order). This matches the typical “logged-in My Account” flow.
Go to WooCommerce → Settings → Emails, then select either “Withdrawal confirmation (customer)” or “Withdrawal notification (admin)”. You can edit subject, heading, and additional content. For deeper customization, copy template files from templates/emails/ into your theme.
The plugin only stores data the customer has explicitly submitted (reason, refund bank account) as order metadata, alongside the existing order record. It does not transmit data to third parties.
Plugin details
Tags on WordPress.org
