{"id":297856,"date":"2026-04-24T05:57:08","date_gmt":"2026-04-24T05:57:08","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/eu-withdrawal-button-for-woocommerce\/"},"modified":"2026-06-18T17:26:29","modified_gmt":"2026-06-18T17:26:29","slug":"eu-withdrawal-button-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/cn.wordpress.org\/plugins\/eu-withdrawal-button-for-woocommerce\/","author":13261307,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.2","stable_tag":"2.0.2","tested":"7.0","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"EU Withdrawal Button for WooCommerce","header_author":"Riin Agency","header_description":"Helps WooCommerce store owners implement the withdrawal flow described in EU Directive 2023\/2673.","assets_banners_color":"9f8585","last_updated":"2026-06-18 17:26:29","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/riin.eu\/withdrawal-plugin","header_author_uri":"https:\/\/riin.eu","rating":5,"author_block_rating":0,"active_installs":200,"downloads":844,"num_ratings":2,"support_threads":2,"support_threads_resolved":2,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.0":{"tag":"2.0.0","author":"Nalut","date":"2026-04-24 05:59:17"},"2.0.1":{"tag":"2.0.1","author":"Nalut","date":"2026-06-09 13:22:36"},"2.0.2":{"tag":"2.0.2","author":"Nalut","date":"2026-06-18 17:26:29"}},"upgrade_notice":{"1.1.0":"<p>New tier system with Freemius licensing. Improved compatibility with custom order number plugins.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":2},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3514355,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3514355,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3514355,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3514355,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.0.0","2.0.1","2.0.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3514355,"resolution":"1","location":"assets","locale":"","width":1877,"height":1556},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3514355,"resolution":"2","location":"assets","locale":"","width":1723,"height":1176},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3514355,"resolution":"3","location":"assets","locale":"","width":1379,"height":914},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3514355,"resolution":"4","location":"assets","locale":"","width":3012,"height":1372},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3514355,"resolution":"5","location":"assets","locale":"","width":2970,"height":1272},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3514355,"resolution":"6","location":"assets","locale":"","width":2984,"height":1568},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3514355,"resolution":"7","location":"assets","locale":"","width":2988,"height":1078}},"screenshots":{"1":"Sticky bar with withdrawal button on the storefront","2":"Withdrawal form modal","3":"Confirmation step with order summary","4":"WooCommerce settings page"}},"plugin_section":[],"plugin_tags":[255182,263925,263226,245590,286],"plugin_category":[45],"plugin_contributors":[],"plugin_business_model":[],"class_list":["post-297856","plugin","type-plugin","status-publish","hentry","plugin_tags-consumer-rights","plugin_tags-eu-directive","plugin_tags-right-of-withdrawal","plugin_tags-withdrawal","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_committers-nalut"],"banners":{"banner":"https:\/\/ps.w.org\/eu-withdrawal-button-for-woocommerce\/assets\/banner-772x250.png?rev=3514355","banner_2x":"https:\/\/ps.w.org\/eu-withdrawal-button-for-woocommerce\/assets\/banner-1544x500.png?rev=3514355","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/eu-withdrawal-button-for-woocommerce\/assets\/icon-128x128.png?rev=3514355","icon_2x":"https:\/\/ps.w.org\/eu-withdrawal-button-for-woocommerce\/assets\/icon-256x256.png?rev=3514355","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/eu-withdrawal-button-for-woocommerce\/assets\/screenshot-1.png?rev=3514355","caption":"Sticky bar with withdrawal button on the storefront"},{"src":"https:\/\/ps.w.org\/eu-withdrawal-button-for-woocommerce\/assets\/screenshot-2.png?rev=3514355","caption":"Withdrawal form modal"},{"src":"https:\/\/ps.w.org\/eu-withdrawal-button-for-woocommerce\/assets\/screenshot-3.png?rev=3514355","caption":"Confirmation step with order summary"},{"src":"https:\/\/ps.w.org\/eu-withdrawal-button-for-woocommerce\/assets\/screenshot-4.png?rev=3514355","caption":"WooCommerce settings page"},{"src":"https:\/\/ps.w.org\/eu-withdrawal-button-for-woocommerce\/assets\/screenshot-5.png?rev=3514355","caption":""},{"src":"https:\/\/ps.w.org\/eu-withdrawal-button-for-woocommerce\/assets\/screenshot-6.png?rev=3514355","caption":""},{"src":"https:\/\/ps.w.org\/eu-withdrawal-button-for-woocommerce\/assets\/screenshot-7.png?rev=3514355","caption":""}],"raw_content":"<!--section=description-->\n<p>EU Directive 2023\/2673 gives online shoppers across the EU a clear right to withdraw from a purchase. From <strong>June 19, 2026<\/strong>, every WooCommerce store selling to EU consumers needs an easy, visible way for customers to start a withdrawal.<\/p>\n\n<p><strong>EU Withdrawal Button for WooCommerce<\/strong> does exactly that \u2014 and nothing you have to think about. You switch it on, and the whole withdrawal process runs on its own. Here is what happens.<\/p>\n\n<h4>What your customers see<\/h4>\n\n<ol>\n<li><strong>Their right to withdraw is shown up front.<\/strong> As soon as a customer places an order, their order confirmation email already includes a \"Withdraw from this order\" button and a note telling them how many days they have to change their mind. Customers see their rights respected from the very first moment \u2014 which builds trust in your store.<\/li>\n<li><strong>The button is always within reach.<\/strong> A sticky withdrawal button also sits on every page of your store, so anyone \u2014 including guest customers with no account \u2014 can start a withdrawal at any time during the period.<\/li>\n<li><strong>They fill in a short form.<\/strong> The customer enters their order number and the email they used at checkout. No login required.<\/li>\n<li><strong>They confirm.<\/strong> The plugin shows their order summary, the customer clicks \"Confirm withdrawal\", and that's it.<\/li>\n<li><strong>They get written proof.<\/strong> The customer immediately receives a timestamped confirmation email that serves as proof of their withdrawal request, as required by the Directive.<\/li>\n<\/ol>\n\n<h4>What you see as the store owner<\/h4>\n\n<ol>\n<li><strong>You get notified.<\/strong> An email lands in your inbox the moment a request comes in.<\/li>\n<li><strong>The order is flagged for you.<\/strong> The order status changes to \"Withdrawal Requested\" and a note is added to the order, so nothing gets lost.<\/li>\n<li><strong>You set the withdrawal period.<\/strong> It defaults to 14 days (the EU standard), but you can change it \u2014 and the plugin uses your value everywhere: in the order-email note, in the form, and in the validation check.<\/li>\n<li><strong>You stay in control of the money.<\/strong> The plugin never touches payments \u2014 you issue the refund through your normal WooCommerce workflow, exactly as today.<\/li>\n<\/ol>\n\n<p>That's the whole flow. The customer gets a simple, legal way to withdraw; you get a tidy, trackable request \u2014 with zero manual work once it's switched on.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Sticky withdrawal button on every page (text and styling configurable)<\/li>\n<li>\"Withdraw from this order\" button inside WooCommerce order emails \u2014 works for guest customers<\/li>\n<li>Modal popup or dedicated page mode<\/li>\n<li>Order validation (order number + email + withdrawal-period check)<\/li>\n<li>Custom \"Withdrawal Requested\" WooCommerce order status<\/li>\n<li>Timestamped confirmation email to the customer + notification to the merchant<\/li>\n<li>WooCommerce email integration (shows under WooCommerce \u2192 Settings \u2192 Emails)<\/li>\n<li>Works with custom order number plugins (Sequential Order Numbers, etc.)<\/li>\n<li>WCAG 2.1 AA accessible (keyboard navigation, focus trap, ARIA labels)<\/li>\n<li>Rate limiting to prevent abuse<\/li>\n<li>Translation-ready (.pot file included)<\/li>\n<li>HPOS (High-Performance Order Storage) compatible<\/li>\n<\/ul>\n\n<h4>Who is this for?<\/h4>\n\n<p>WooCommerce store owners who sell to EU consumers and want a clear, compliant withdrawal process that runs by itself \u2014 without coding, legal headaches, or extra work for the customer.<\/p>\n\n<h4>Disclaimer<\/h4>\n\n<p>This plugin is a technical tool that helps implement a withdrawal flow. It does not constitute legal advice and does not guarantee compliance with any specific regulation. Consult a legal professional to ensure your store meets all applicable requirements.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>eu-withdrawal-button-for-woocommerce<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress<\/li>\n<li>Go to WooCommerce \u2192 Settings \u2192 Withdrawal Button to configure<\/li>\n<li>The withdrawal button will appear on your storefront<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20does%20this%20plugin%20do%3F\"><h3>What does this plugin do?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"is%20there%20a%20live%20demo%3F\"><h3>Is there a live demo?<\/h3><\/dt>\n<dd><p>Yes. You can try the plugin \u2014 including the paid Basic and Pro features \u2014 on our live demo store, no installation required: https:\/\/plugin.riin.eu<\/p><\/dd>\n<dt id=\"does%20it%20work%20for%20guest%20orders%3F\"><h3>Does it work for guest orders?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"is%20the%20withdrawal%20button%20added%20to%20woocommerce%20order%20emails%3F\"><h3>Is the withdrawal button added to WooCommerce order emails?<\/h3><\/dt>\n<dd><p>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 \u2014 they can start a withdrawal in one click, straight from their inbox.<\/p><\/dd>\n<dt id=\"does%20it%20send%20email%20notifications%3F\"><h3>Does it send email notifications?<\/h3><\/dt>\n<dd><p>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 \u2014 it serves as written proof of the withdrawal request, as required by EU Directive 2023\/2673. All emails appear under WooCommerce \u2192 Settings \u2192 Emails, so you can enable, edit and style them like any other WooCommerce email.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20a%20customer%20submits%20a%20withdrawal%3F\"><h3>What happens when a customer submits a withdrawal?<\/h3><\/dt>\n<dd><p>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).<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20refund%20or%20pay%20out%20money%3F\"><h3>Does the plugin refund or pay out money?<\/h3><\/dt>\n<dd><p>No. The plugin manages the withdrawal request and order status only \u2014 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.<\/p><\/dd>\n<dt id=\"what%20is%20the%20difference%20between%20the%20free%2C%20basic%20and%20pro%20versions%3F\"><h3>What is the difference between the free, Basic and Pro versions?<\/h3><\/dt>\n<dd><p>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.<\/p>\n\n<p>Try the full version live \u2014 no install needed \u2014 at https:\/\/plugin.riin.eu<\/p><\/dd>\n<dt id=\"can%20i%20exclude%20certain%20products%3F\"><h3>Can I exclude certain products?<\/h3><\/dt>\n<dd><p>Category exclusions are available in the Basic version, and per-product exceptions in the Pro version.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20custom%20order%20number%20plugins%3F\"><h3>Does it work with custom order number plugins?<\/h3><\/dt>\n<dd><p>Yes. The plugin searches by WooCommerce order ID, custom order number meta fields, and order number output \u2014 compatible with Sequential Order Numbers and similar plugins.<\/p><\/dd>\n<dt id=\"is%20my%20data%20sent%20to%20third%20parties%3F\"><h3>Is my data sent to third parties?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.2<\/h4>\n\n<ul>\n<li>Fix: the optional footer \"Right of withdrawal\" link is now always visible \u2014 it previously inherited the theme's footer text colour and could blend into the background. It now sits on a light strip with a clearly coloured link.<\/li>\n<li>New: French (fr_FR), Finnish (fi) and Swedish (sv_SE) translations bundled.<\/li>\n<\/ul>\n\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>Fix: the withdrawal total on the confirmation step now updates live as the customer checks\/unchecks items or changes quantities, instead of always showing the full order total.<\/li>\n<li>Fix: the withdrawal total now reflects only the selected line items \u2014 shipping, fees and other order lines are no longer included.<\/li>\n<li>Tweak: the confirmation total is now labelled \"Withdrawal total\" for clarity.<\/li>\n<li>Compatibility: tested up to WordPress 7.0.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li><strong>WordPress.org edition<\/strong>. First release published on the WordPress.org plugin directory. Feature parity with 1.5.x, Lite tier only. Paid upgrades continue to be distributed via riin.eu.<\/li>\n<li>Code: Full prefix refactor to <code>ra_euwb_<\/code> \/ <code>RA_EUWB_<\/code> \/ <code>ra-euwb-<\/code> 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 (<code>wc-ewb-withdrawn<\/code>, <code>wc-ewb-completed<\/code>), the database table (<code>{prefix}ewb_withdrawals<\/code>) and the <code>_ra_euwb_deactivated_withdrawal<\/code> order meta key are preserved so existing installations continue to work without data migration.<\/li>\n<li>Code: Removed all inline <code>&lt;style&gt;<\/code> and <code>&lt;script&gt;<\/code> output. Admin order-status colours and the frontend <code>ra-euwb-hidden<\/code> 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.<\/li>\n<li>Code: Custom CSS setting removed from the free build (WordPress.org guideline: plugins must not execute arbitrary user-supplied CSS from options).<\/li>\n<li>Code: Text domain updated from <code>eu-withdrawal-button<\/code> to <code>eu-withdrawal-button-for-woocommerce<\/code> to match the WordPress.org plugin slug.<\/li>\n<li>Misc: Removed the now-unused <code>class-ewb-i18n.php<\/code> helper (text domain is loaded directly via <code>load_plugin_textdomain()<\/code> on <code>init<\/code>).<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li><strong>Compliance Update \u2014 EU Directive 2023\/2673<\/strong>. All compliance-critical features are available in the free version.<\/li>\n<li><strong>Guest-friendly direct link in order emails<\/strong>: The WooCommerce customer \"processing\" and \"completed\" order emails now include a \"Withdraw from this order\" button. The link opens the withdrawal form pre-verified against the order \u2014 no login required. Solves the guest-checkout compliance gap (the directive explicitly requires that withdrawal must not depend on having a customer account).<\/li>\n<li><strong>Dismissible sticky bar<\/strong>: Visitors can close the sticky bar with an X button. Dismissal is remembered for a configurable number of days (default 7, configurable 0\u201330) via <code>localStorage<\/code>. My Account pages ignore the dismissal and always show the bar (EU compliance \u2014 customer must be able to request a withdrawal there).<\/li>\n<li><strong>Partial withdrawal support<\/strong>: Customers can now select specific items and quantities to withdraw instead of the whole order. The confirmation step shows per-item checkboxes and quantity inputs, pre-filled with the full order.<\/li>\n<li><strong>Optional IBAN field<\/strong>: Customers can provide a bank account for the refund (useful when they paid by card or want the refund sent to a different account). Leaving it empty tells the merchant to refund to the original payment method. The IBAN is shown prominently in the merchant notification email and in the admin withdrawals list.<\/li>\n<li><strong>Configurable sticky bar display<\/strong>: New \"Show sticky bar on\" multiselect under Withdrawal Button \u2192 General lets merchants pick which page types show the sticky bar (Homepage, Shop &amp; product pages, Cart &amp; checkout, Other). The My Account pages always show the sticky bar (EU compliance \u2014 customer must be able to request a withdrawal there). Existing installations default to <strong>My Account pages only<\/strong> after the upgrade, so update your settings if you want the sticky bar elsewhere.<\/li>\n<li><strong>Discreet footer link<\/strong>: Optional small \"Right of withdrawal\" link can be shown in the footer (useful when the sticky bar is disabled on most pages).<\/li>\n<li>Admin: Withdrawals list now shows a Full \/ Partial badge and a hoverable list of the selected items per request, plus a dedicated IBAN column.<\/li>\n<li>Emails: Customer confirmation and merchant notification emails now list only the selected withdrawn items (with a partial-withdrawal notice when applicable) and show the IBAN. Legacy rows from pre-1.5.0 fall back to the full-order view.<\/li>\n<li>Database: New <code>withdrawn_items<\/code> (JSON) and <code>iban<\/code> columns on <code>{prefix}ewb_withdrawals<\/code>. The upgrade runs automatically on plugin load via <code>dbDelta()<\/code> \u2014 no manual action required.<\/li>\n<li>Security: Submitted item selections are re-validated server-side against the actual order (quantities clamped, unknown items rejected) to prevent tampering.<\/li>\n<li>Security hardening (CIA audit pass): (a) CSV export now escapes spreadsheet formula injection (leading <code>=<\/code>, <code>+<\/code>, <code>-<\/code>, <code>@<\/code>, tab, CR) and includes the <code>Withdrawn Items<\/code> + <code>IBAN<\/code> columns that were previously silently misaligned. (b) Client IP detection no longer trusts <code>HTTP_X_FORWARDED_FOR<\/code> \/ <code>HTTP_CLIENT_IP<\/code> by default \u2014 sites behind a trusted reverse proxy (e.g. Cloudflare) can opt in via the <code>ewb_trust_forwarded_ip<\/code> 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 <code>ewb_validate_order<\/code> and <code>ewb_lookup_by_key<\/code> 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.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>IMPORTANT: Clarified \"Withdrawal Completed\" semantics. Renamed the user-facing label to \"Withdrawal Closed\" everywhere it appeared (order status, emails, order notes, My Account box, admin). The status no longer implies that an automatic refund has been issued \u2014 merchants must refund manually via WooCommerce \u2192 Orders. Automatic <code>wc_create_refund()<\/code> integration is planned for a future Pro release. Internal status slug (<code>wc-ewb-completed<\/code>) is unchanged so existing orders continue to work.<\/li>\n<li>IMPORTANT FIX: The sticky bar, withdrawal form, confirmation email, \"closed\" email and admin information guide previously hardcoded \"14 days\" even when merchants configured a different <code>ewb_withdrawal_days<\/code> value. All texts now reflect the configured value dynamically with proper single\/plural handling. Merchants can also use the <code>{days}<\/code> placeholder in the custom Bar text field.<\/li>\n<li>Updated customer closed-request email to clearly state that the merchant will issue the refund manually, instead of claiming the refund has already been processed.<\/li>\n<li>Added a \"Heads up\" admin notice on every plugin settings tab explaining the manual refund workflow.<\/li>\n<li>Performance &amp; reliability: Order number lookup fallback (step 3) now filters by the configured withdrawal window (days + 2 buffer) instead of the arbitrary \"last 500 orders\" limit, and is capped at 1000 orders scanned. Both bounds are adjustable via the <code>ewb_order_lookup_cutoff_date<\/code> and <code>ewb_order_lookup_max_scan<\/code> filters. A warning is logged if the fallback triggers \u2014 this helps merchants spot custom order number plugins that don't use the standard <code>_order_number<\/code> meta key.<\/li>\n<li>Code quality: Custom CSS (Basic+) now uses <code>wp_add_inline_style()<\/code> attached to the main <code>ewb-frontend<\/code> stylesheet handle instead of printing a raw <code>&lt;style&gt;<\/code> tag on <code>wp_head<\/code>. This integrates with minify\/cache plugins and follows WordPress standards.<\/li>\n<\/ul>\n\n<h4>1.3.3<\/h4>\n\n<ul>\n<li>Fix: Removed the <code>parent =&gt; woocommerce<\/code> 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 <code>admin.php?page=ewb-withdrawal<\/code> 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 \u2192 Settings \u2192 Withdrawal Button via <code>first-path<\/code>.<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>Fix: Freemius \"Opt In\" and Account\/Pricing pages now work correctly. Previously the menu used an embedded WooCommerce settings URL as its slug, which prevented the Freemius SDK from rendering its own admin pages (opt-in form, account, pricing, checkout)<\/li>\n<li>Added a dedicated <code>ewb-withdrawal<\/code> plugin page for Freemius SDK, with <code>first-path<\/code> redirecting Settings link to the WooCommerce \u2192 Settings \u2192 Withdrawal Button tab (existing UX preserved)<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Fix: \"Get Basic\" and \"Get Pro\" buttons in the Upgrade tab now open the Freemius in-admin checkout (iframe) instead of redirecting to the marketing site<\/li>\n<li>Fix: Restored the \"License\" \/ \"Activate License\" link on the Plugins page by registering the Freemius account page (<code>ewb-account<\/code>)<\/li>\n<li>Added dedicated Freemius pricing page (<code>ewb-pricing<\/code>) for in-admin checkout flow<\/li>\n<li>Updated Upgrade tab FAQ to reflect the new in-admin checkout experience<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Freemius: Premium code is now properly marked with <code>is__premium_only()<\/code> gates so Freemius can auto-generate a clean free build without premium features<\/li>\n<li>Renamed <code>class-ewb-rest-api.php<\/code> to <code>class-ewb-rest-api__premium_only.php<\/code> so Freemius excludes it from the free build<\/li>\n<li>Added <code>Requires Plugins: woocommerce<\/code> header (WordPress 6.5+ plugin dependencies)<\/li>\n<li>readme.txt: added <code>nalut<\/code> to contributors<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Fix: Plugin text domain is now properly loaded, enabling translations via WPML \/ Loco Translate \/ .mo files<\/li>\n<li>Add wpml-config.xml for admin text translation support<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Switched to Freemius-only distribution (independent of WordPress.org)<\/li>\n<li>Disabled WordPress.org compliance mode in Freemius SDK<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added tier system (Lite \/ Basic \/ Pro)<\/li>\n<li>Freemius integration for license management<\/li>\n<li>Support tab with contact info<\/li>\n<li>Upgrade tab with plan comparison<\/li>\n<li>Improved custom order number compatibility<\/li>\n<li>Various bug fixes and improvements<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>4-step withdrawal flow<\/li>\n<li>Sticky bar with configurable text<\/li>\n<li>Modal popup and page display modes<\/li>\n<li>WooCommerce email integration<\/li>\n<li>Custom order status: Withdrawal Requested<\/li>\n<li>Rate limiting<\/li>\n<li>HPOS compatibility<\/li>\n<li>WCAG 2.1 AA accessibility<\/li>\n<li>Translation-ready<\/li>\n<\/ul>","raw_excerpt":"Free EU right-of-withdrawal button &amp; form for WooCommerce. Directive 2023\/2673: order validation, 14-day check, guest customers &amp; merchant emails.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/297856","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=297856"}],"author":[{"embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/nalut"}],"wp:attachment":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=297856"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=297856"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=297856"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=297856"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=297856"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=297856"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}