| 开发者 | riinagency |
|---|---|
| 更新时间 | 2026年6月19日 01:26 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 7.0 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
eu-withdrawal-button-for-woocommerce folder to /wp-content/plugins/It adds a visible withdrawal button to your WooCommerce store and a form where customers can submit a right-of-withdrawal request under EU Directive 2023/2673. The plugin validates the order, notifies both the customer and the merchant by email, adds an order note, and tracks the request.
Yes. You can try the plugin — including the paid Basic and Pro features — on our live demo store, no installation required: https://plugin.riin.eu
Yes. Customers do not need an account. The form verifies the request using the order number and the email address used at checkout, so guest checkout orders are fully supported.
Yes. A "Withdraw from this order" button is added automatically to the customer's order-processing and order-completed emails, along with a note showing how many days remain to withdraw. Because guest customers have no My Account page, the order email is their guaranteed touchpoint — they can start a withdrawal in one click, straight from their inbox.
Yes. When a request is submitted, the customer receives a confirmation email and the merchant receives a notification. The customer's email is timestamped and lists the order and the items being withdrawn — it serves as written proof of the withdrawal request, as required by EU Directive 2023/2673. All emails appear under WooCommerce → Settings → Emails, so you can enable, edit and style them like any other WooCommerce email.
The customer receives a confirmation email, the merchant receives a notification, an order note is added, and the order status changes to "Withdrawal Requested" (configurable).
No. The plugin manages the withdrawal request and order status only — it never moves money. You process the actual refund through your normal WooCommerce refund and payment-gateway workflow, exactly as you do today. This keeps you in full control of every payout.
The free version includes everything you need to receive and track withdrawal requests: the sticky button, the validated form, the withdrawal button inside order emails, and customer + merchant emails. Basic adds a customer-facing experience (Thank-You and My-Account views, a "Withdrawal Completed" status and email, an admin withdrawals dashboard, colours and styling, and category exclusions). Pro adds a statistics dashboard, CSV export, a REST API, per-product exceptions and WPML/Polylang support. Try the full version live — no install needed — at https://plugin.riin.eu
Category exclusions are available in the Basic version, and per-product exceptions in the Pro version.
Yes. The plugin searches by WooCommerce order ID, custom order number meta fields, and order number output — compatible with Sequential Order Numbers and similar plugins.
No. All withdrawal data is stored in your own WordPress database and is never sent anywhere else. The free WordPress.org version contains no tracking and no third-party SDKs.
ra_euwb_ / RA_EUWB_ / ra-euwb- across options, hooks, CSS classes, JS globals, nonces and admin menu slugs, to comply with the WordPress.org guidelines on unique prefixes. Existing WC order status slugs (wc-ewb-withdrawn, wc-ewb-completed), the database table ({prefix}ewb_withdrawals) and the _ra_euwb_deactivated_withdrawal order meta key are preserved so existing installations continue to work without data migration.<style> and <script> output. Admin order-status colours and the frontend ra-euwb-hidden utility class are now part of the enqueued stylesheets. Frontend button colours are static (overridable via theme CSS) instead of dynamic option-backed inline styles.eu-withdrawal-button to eu-withdrawal-button-for-woocommerce to match the WordPress.org plugin slug.class-ewb-i18n.php helper (text domain is loaded directly via load_plugin_textdomain() on init).localStorage. My Account pages ignore the dismissal and always show the bar (EU compliance — customer must be able to request a withdrawal there).withdrawn_items (JSON) and iban columns on {prefix}ewb_withdrawals. The upgrade runs automatically on plugin load via dbDelta() — no manual action required.=, +, -, @, tab, CR) and includes the Withdrawn Items + IBAN columns that were previously silently misaligned. (b) Client IP detection no longer trusts HTTP_X_FORWARDED_FOR / HTTP_CLIENT_IP by default — sites behind a trusted reverse proxy (e.g. Cloudflare) can opt in via the ewb_trust_forwarded_ip filter. (c) Submission now holds a MySQL advisory lock per order around the duplicate check + insert, closing the race window that allowed two simultaneous clicks to create duplicate withdrawal rows. (d) The public ewb_validate_order and ewb_lookup_by_key endpoints are now rate-limited (30 requests per 5 minutes per IP). (e) "Order not found" and "email does not match the order" are collapsed into a single generic verification error to prevent order enumeration. (f) Support form Reply-To header explicitly strips CR/LF defending against header injection.wc_create_refund() integration is planned for a future Pro release. Internal status slug (wc-ewb-completed) is unchanged so existing orders continue to work.ewb_withdrawal_days value. All texts now reflect the configured value dynamically with proper single/plural handling. Merchants can also use the {days} placeholder in the custom Bar text field.ewb_order_lookup_cutoff_date and ewb_order_lookup_max_scan filters. A warning is logged if the fallback triggers — this helps merchants spot custom order number plugins that don't use the standard _order_number meta key.wp_add_inline_style() attached to the main ewb-frontend stylesheet handle instead of printing a raw <style> tag on wp_head. This integrates with minify/cache plugins and follows WordPress standards.parent => woocommerce menu setting so the Freemius SDK can properly register its own admin pages (connect/opt-in, account, pricing). Previously the activation flow tried to redirect users to admin.php?page=ewb-withdrawal which WordPress rejected with "Sorry, you are not allowed to access this page." because the submenu was never registered. Plugin Settings link still opens WooCommerce → Settings → Withdrawal Button via first-path.ewb-withdrawal plugin page for Freemius SDK, with first-path redirecting Settings link to the WooCommerce → Settings → Withdrawal Button tab (existing UX preserved)ewb-account)ewb-pricing) for in-admin checkout flowis__premium_only() gates so Freemius can auto-generate a clean free build without premium featuresclass-ewb-rest-api.php to class-ewb-rest-api__premium_only.php so Freemius excludes it from the free buildRequires Plugins: woocommerce header (WordPress 6.5+ plugin dependencies)nalut to contributors