| 开发者 | riinagency |
|---|---|
| 更新时间 | 2026年7月7日 00:02 |
| 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 store, along with a form where customers can submit withdrawal requests. The plugin validates the order, notifies both parties via email, and tracks the request.
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).
Product category exclusions and per-product exceptions are available in the Pro version.
The free version covers the legal essentials: the withdrawal button, the form, order validation, notifications and a read-only withdrawals overview. Pro adds the merchant toolkit — one-click Complete/Reject with automatic customer emails, My Account widgets, styling, exclusions, GDPR consent checkbox, payment-method IBAN rules, statistics, CSV export and the REST API.
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.
English plus bundled translations for Estonian, Finnish, French, Swedish, Italian and Dutch. All texts are translation-ready (gettext), and merchant-entered texts can be translated per language with WPML/Polylang.
No. The plugin stores withdrawal data in your own WordPress database and makes no external requests. Refund IBANs are stored encrypted, shown masked, and erased automatically 30 days after a withdrawal is completed. The plugin integrates with the WordPress privacy tools (Tools → Export/Erase Personal Data).
{privacy_policy} placeholder linking to your privacy policy page.load_plugin_textdomain() call was lost in the 2.0.0 refactor, so Estonian/Finnish/French/Swedish stores saw English.ra_euwb_confirmation_before_actions action in the form template; ra_euwb_offline_payment_methods filter; shared set_withdrawal_status() service behind admin, bulk and REST status changes.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