{"id":277507,"date":"2026-02-04T06:02:25","date_gmt":"2026-02-04T06:02:25","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/revoker-for-woocommerce\/"},"modified":"2026-06-19T09:37:54","modified_gmt":"2026-06-19T09:37:54","slug":"revoker-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/cn.wordpress.org\/plugins\/revoker-for-woocommerce\/","author":23440811,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.21","stable_tag":"1.0.21","tested":"7.0","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Revoker for WooCommerce","header_author":"KOMMERS GmbH","header_description":"EU-compliant withdrawal button for WooCommerce according to EU Directive (EU) 2023\/2673 and \u00a7 356a BGB. Two-step withdrawal process with automatic email confirmation.","assets_banners_color":"1341e8","last_updated":"2026-06-19 09:37:54","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/kommers.io\/","header_author_uri":"https:\/\/kommers.io","rating":0,"author_block_rating":0,"active_installs":80,"downloads":1404,"num_ratings":0,"support_threads":1,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.10":{"tag":"1.0.10","author":"kommers","date":"2026-06-09 07:00:25"},"1.0.11":{"tag":"1.0.11","author":"kommers","date":"2026-06-10 10:22:50"},"1.0.12":{"tag":"1.0.12","author":"kommers","date":"2026-06-10 10:34:10"},"1.0.13":{"tag":"1.0.13","author":"kommers","date":"2026-06-10 11:01:32"},"1.0.14":{"tag":"1.0.14","author":"kommers","date":"2026-06-10 19:49:22"},"1.0.15":{"tag":"1.0.15","author":"kommers","date":"2026-06-11 07:19:02"},"1.0.16":{"tag":"1.0.16","author":"kommers","date":"2026-06-12 08:16:09"},"1.0.17":{"tag":"1.0.17","author":"kommers","date":"2026-06-12 13:51:32"},"1.0.18":{"tag":"1.0.18","author":"kommers","date":"2026-06-17 08:41:59"},"1.0.19":{"tag":"1.0.19","author":"kommers","date":"2026-06-17 08:41:59"},"1.0.20":{"tag":"1.0.20","author":"kommers","date":"2026-06-19 09:14:11"},"1.0.21":{"tag":"1.0.21","author":"kommers","date":"2026-06-19 09:37:54"},"1.0.3":{"tag":"1.0.3","author":"kommers","date":"2026-02-16 08:54:27"},"1.0.4":{"tag":"1.0.4","author":"kommers","date":"2026-02-17 05:58:52"},"1.0.5":{"tag":"1.0.5","author":"kommers","date":"2026-05-21 15:48:02"},"1.0.6":{"tag":"1.0.6","author":"kommers","date":"2026-06-02 08:08:50"},"1.0.7":{"tag":"1.0.7","author":"kommers","date":"2026-06-03 07:56:50"},"1.0.8":{"tag":"1.0.8","author":"kommers","date":"2026-06-04 14:59:14"},"1.0.9":{"tag":"1.0.9","author":"kommers","date":"2026-06-04 15:32:08"}},"upgrade_notice":{"1.0.0":"<p>Initial stable release of Revoker for WooCommerce.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3453497,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3453497,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3453497,"resolution":"1544x500","location":"assets","locale":"","width":4768,"height":1544},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3453497,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"revoker\/withdrawal-policy":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"revoker\/withdrawal-policy","version":"1.0.0","title":"Withdrawal policy","category":"widgets","description":"Displays the legal withdrawal policy for your online shop.","keywords":["withdrawal","policy","eu","legal","revoker"],"textdomain":"revoker-for-woocommerce","attributes":{"showTitle":{"type":"boolean","default":true},"showDeadline":{"type":"boolean","default":true},"showAddress":{"type":"boolean","default":true},"style":{"type":"string","default":"default"}},"supports":{"html":false,"align":["wide","full"],"spacing":{"margin":true,"padding":true},"color":{"background":true,"text":true},"typography":{"fontSize":true}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/editor.css","style":"file:.\/style.css","render":"file:.\/render.php"}},"tagged_versions":["1.0.10","1.0.11","1.0.12","1.0.13","1.0.14","1.0.15","1.0.16","1.0.17","1.0.18","1.0.19","1.0.20","1.0.21","1.0.3","1.0.4","1.0.5","1.0.6","1.0.7","1.0.8","1.0.9"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[255182,395,255181,245590,286],"plugin_category":[45],"plugin_contributors":[255183],"plugin_business_model":[],"class_list":["post-277507","plugin","type-plugin","status-publish","hentry","plugin_tags-consumer-rights","plugin_tags-eu","plugin_tags-revocation","plugin_tags-withdrawal","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-kommers","plugin_committers-kommers"],"banners":{"banner":"https:\/\/ps.w.org\/revoker-for-woocommerce\/assets\/banner-772x250.png?rev=3453497","banner_2x":"https:\/\/ps.w.org\/revoker-for-woocommerce\/assets\/banner-1544x500.png?rev=3453497","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/revoker-for-woocommerce\/assets\/icon-128x128.png?rev=3453497","icon_2x":"https:\/\/ps.w.org\/revoker-for-woocommerce\/assets\/icon-256x256.png?rev=3453497","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Revoker for WooCommerce<\/strong> adds a withdrawal button to your WooCommerce store, designed to help you implement the customer's right of withdrawal in accordance with EU Directive 2023\/2673. Customers can revoke orders directly from their account area.<\/p>\n\n<h4>Why Revoker?<\/h4>\n\n<p>Starting in 2026, online merchants in the EU are required to provide consumers with an easy way to exercise their right of withdrawal. Revoker implements this requirement elegantly and user-friendly.<\/p>\n\n<h4>Key Features<\/h4>\n\n<ul>\n<li><strong>Withdrawal Button<\/strong> \u2013 Automatically appears on the order details page in customer accounts<\/li>\n<li><strong>Two-Step Process<\/strong> \u2013 Button \u2192 Confirmation page prevents accidental withdrawals<\/li>\n<li><strong>Deadline Calculation<\/strong> \u2013 Automatic calculation of remaining withdrawal period<\/li>\n<li><strong>Partial Withdrawal<\/strong> \u2013 Customers can withdraw individual items from an order<\/li>\n<li><strong>Guest Support<\/strong> \u2013 Withdrawal without customer account via order number + email<\/li>\n<li><strong>Email Notifications<\/strong> \u2013 Automatic confirmation to customer and shop admin<\/li>\n<li><strong>Withdrawal Log<\/strong> \u2013 Complete overview of all withdrawals in the backend<\/li>\n<li><strong>Product Exceptions<\/strong> \u2013 Exclude categories, individual products, or digital downloads<\/li>\n<li><strong>Customizable<\/strong> \u2013 Button text, style, and withdrawal period individually configurable<\/li>\n<li><strong>PDF Confirmation<\/strong> \u2013 Generate PDF documents for withdrawal confirmations<\/li>\n<li><strong>Gutenberg Block<\/strong> \u2013 Add withdrawal policy information easily to any page<\/li>\n<\/ul>\n\n<h4>Legal Compliance<\/h4>\n\n<ul>\n<li>EU Directive 2023\/2673<\/li>\n<li>Consumer Rights Directive 2011\/83\/EU<\/li>\n<li>GDPR compliant<\/li>\n<\/ul>\n\n<h4>Pro Version<\/h4>\n\n<p>Need advanced features? <a href=\"https:\/\/kommers.io\/plugins\/revoker\">Revoker Pro<\/a> offers:<\/p>\n\n<ul>\n<li><strong>Dashboard &amp; Statistics<\/strong> \u2013 Withdrawal rates, trends, top products<\/li>\n<li><strong>Automatic Refunds<\/strong> \u2013 Integration with WooCommerce Refunds<\/li>\n<li><strong>Notifications<\/strong> \u2013 Slack, Microsoft Teams, Custom Webhooks<\/li>\n<li><strong>REST API<\/strong> \u2013 Complete API for external integrations<\/li>\n<li><strong>Rules Engine<\/strong> \u2013 Advanced exception rules (geo, price, time, etc.)<\/li>\n<li><strong>UI Builder<\/strong> \u2013 Visual editor for button and modal<\/li>\n<li><strong>Return Labels<\/strong> \u2013 Integration with DHL, DPD, GLS<\/li>\n<li><strong>Accounting Export<\/strong> \u2013 DATEV, lexoffice, sevDesk export<\/li>\n<li><strong>Fraud Detection<\/strong> \u2013 Protect against abuse<\/li>\n<li><strong>Multilingual<\/strong> \u2013 6 languages included<\/li>\n<\/ul>\n\n<h3>Additional Info<\/h3>\n\n<h4>Minimum Requirements<\/h4>\n\n<ul>\n<li>WordPress 6.0 or higher<\/li>\n<li>WooCommerce 7.0 or higher<\/li>\n<li>PHP 7.4 or higher<\/li>\n<\/ul>\n\n<h4>Privacy<\/h4>\n\n<p>This plugin:\n* Stores withdrawal data locally in your WordPress database\n* Does not send data to external servers\n* Is fully GDPR compliant<\/p>\n\n<p>The Pro version communicates with kommers.io for license validation and updates.<\/p>\n\n<!--section=installation-->\n<h4>Automatic Installation<\/h4>\n\n<ol>\n<li>Go to <strong>Plugins \u2192 Add New<\/strong> in your WordPress admin<\/li>\n<li>Search for \"Revoker for WooCommerce\"<\/li>\n<li>Click <strong>Install Now<\/strong> and then <strong>Activate<\/strong><\/li>\n<\/ol>\n\n<h4>Manual Installation<\/h4>\n\n<ol>\n<li>Download the plugin as a ZIP file<\/li>\n<li>Go to <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong><\/li>\n<li>Select the ZIP file and click <strong>Install Now<\/strong><\/li>\n<li>Activate the plugin<\/li>\n<\/ol>\n\n<h4>After Installation<\/h4>\n\n<ol>\n<li>Go to <strong>WooCommerce \u2192 Withdrawal Button<\/strong><\/li>\n<li>Configure the withdrawal period (default: 14 days)<\/li>\n<li>Customize button text and style as desired<\/li>\n<li>Optional: Exclude specific categories or products<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20the%20plugin%20gdpr%20compliant%3F\"><h3>Is the plugin GDPR compliant?<\/h3><\/dt>\n<dd><p>Yes. The plugin only stores data necessary for the withdrawal process and respects all data protection requirements. Withdrawal data is stored together with the order.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20work%20with%20my%20theme%3F\"><h3>Does the plugin work with my theme?<\/h3><\/dt>\n<dd><p>Revoker is designed to work with all WooCommerce-compatible themes. The button automatically adapts to your theme's styling.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20withdrawal%20period%3F\"><h3>Can I customize the withdrawal period?<\/h3><\/dt>\n<dd><p>Yes. Under <strong>WooCommerce \u2192 Withdrawal Button \u2192 Settings<\/strong> you can set the period between 7 and 365 days. The EU standard is 14 days.<\/p><\/dd>\n<dt id=\"can%20guests%20also%20withdraw%3F\"><h3>Can guests also withdraw?<\/h3><\/dt>\n<dd><p>Yes. Using the shortcode <code>[revoker_withdrawal_search]<\/code> guests can find their order by order number and email address and submit a withdrawal.<\/p><\/dd>\n<dt id=\"which%20products%20can%20i%20exclude%20from%20withdrawal%3F\"><h3>Which products can I exclude from withdrawal?<\/h3><\/dt>\n<dd><p>You can exclude:\n* Complete categories\n* Individual products\n* All digital\/downloadable products<\/p><\/dd>\n<dt id=\"are%20emails%20sent%20automatically%3F\"><h3>Are emails sent automatically?<\/h3><\/dt>\n<dd><p>Yes. For each withdrawal, a confirmation is automatically sent to the customer. Optionally, the shop admin can also be notified.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20compatible%20with%20hpos%3F\"><h3>Is the plugin compatible with HPOS?<\/h3><\/dt>\n<dd><p>Yes. Revoker fully supports WooCommerce's High-Performance Order Storage (HPOS) feature.<\/p><\/dd>\n<dt id=\"in%20which%20languages%20is%20the%20plugin%20available%3F\"><h3>In which languages is the plugin available?<\/h3><\/dt>\n<dd><p>The plugin is developed with full internationalization support and includes translations for:\n* German (de_DE)\n* English (en_US)\n* French (fr_FR)\n* Italian (it_IT)\n* Spanish (es_ES)\n* Dutch (nl_NL)\n* Polish (pl_PL)<\/p><\/dd>\n<dt id=\"how%20do%20i%20add%20the%20withdrawal%20policy%20to%20a%20page%3F\"><h3>How do I add the withdrawal policy to a page?<\/h3><\/dt>\n<dd><p>You can use the Gutenberg block \"Withdrawal Policy\" or the shortcode <code>[revoker_withdrawal_policy]<\/code> to display the legally required withdrawal information on any page.<\/p><\/dd>\n<dt id=\"can%20i%20translate%20the%20custom%20texts%20per%20language%20%28polylang%29%3F\"><h3>Can I translate the custom texts per language (Polylang)?<\/h3><\/dt>\n<dd><p>Yes. Revoker's built-in interface texts are already translated for the bundled languages and follow your site language automatically \u2014 there is nothing to set up for those.<\/p>\n\n<p>For the texts you customize under <strong>WooCommerce \u2192 Withdrawal Button<\/strong> (the button labels, the withdrawal reasons, the \"next steps\" and the custom box text), Revoker registers them with <strong>Polylang<\/strong>, so they show up under <strong>Languages \u2192 String translations<\/strong>. There you can enter a translation for each language. Note: a customizable field only appears there once you have actually entered a value for it \u2014 if you leave a field empty, Revoker automatically uses its own translated default for the visitor's language, so there is nothing to translate.<\/p>\n\n<p>If you also want to edit the bundled interface translations themselves, you can use a tool such as the free Loco Translate plugin.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.21<\/h4>\n\n<ul>\n<li>Removed: The \"Legal text updates \/ automatic updates for regulatory changes\" Pro feature was advertised in the upsell and readmes although it is not active. The claim has been removed so the plugin no longer promises a feature it does not currently provide.<\/li>\n<\/ul>\n\n<h4>1.0.20<\/h4>\n\n<ul>\n<li>Changed: Removed unsubstantiated legal claims from the Pro feature overview and the plugin description (e.g. \"lawyer reviewed\", \"legally compliant texts\/translations\"). The wording now describes what the plugin does without asserting that the texts are legally vetted. Revoker provides withdrawal\/return text templates and does not constitute legal advice \u2014 please have your texts reviewed by your own legal counsel.<\/li>\n<\/ul>\n\n<h4>1.0.19<\/h4>\n\n<ul>\n<li>Fixed: In the guest withdrawal flow (the [revoker_withdrawal_search] form), the order overview, the success message and the confirmation email could appear untranslated (in the site's default language) on multilingual sites \u2014 while the search form itself was translated. These parts are rendered via AJAX, where WordPress loses the front-end\/multilingual language and falls back to the admin or default language. The plugin now carries the storefront language into the AJAX request and switches to it before rendering and sending the email.<\/li>\n<\/ul>\n\n<h4>1.0.18<\/h4>\n\n<ul>\n<li>Added: Polish (pl_PL) translation \u2014 the plugin is now fully translated into Polish (front-end, emails and admin).<\/li>\n<\/ul>\n\n<h4>1.0.17<\/h4>\n\n<ul>\n<li>Added: Polylang support for the customizable texts. The button labels, withdrawal reasons, \"next steps\" and custom box text you set under WooCommerce \u2192 Withdrawal Button now appear under Languages \u2192 String translations, so you can translate them per language. Fields left empty keep using the plugin's built-in per-language defaults.<\/li>\n<\/ul>\n\n<h4>1.0.16<\/h4>\n\n<ul>\n<li>Fixed: After a withdrawal, the order could stay on its previous status (e.g. \"Completed\") instead of moving to \"Withdrawal requested\". WooCommerce's update_status() silently swallows errors during a status transition; the plugin now verifies the transition took effect, re-applies it directly if it did not, and logs the reason when WP_DEBUG is on \u2014 so merchants get a reliable status-based way to track pending withdrawals.<\/li>\n<\/ul>\n\n<h4>1.0.15<\/h4>\n\n<ul>\n<li>Fixed: The \"Documentation\" link in the settings footer pointed to a URL that returned an error. It now links to the plugin page at https:\/\/kommers.io\/plugins\/revoker.<\/li>\n<\/ul>\n\n<h4>1.0.14<\/h4>\n\n<ul>\n<li>Added: A \"To my orders\" link toggle \u2014 hide the link shown after a withdrawal. Useful for shops that mostly handle guest withdrawals, where the link only leads to the (empty) account\/login page.<\/li>\n<li>Improved: Withdrawal admin notifications now add an order note recording exactly which address(es) the notification was sent to, and log a clear message (plus an order note) when wp_mail fails \u2014 so a notification dropped by the mail server\/SMTP is no longer silently invisible.<\/li>\n<li>Improved: Translations updated and completed for German, French, Italian, Spanish and Dutch.<\/li>\n<\/ul>\n\n<h4>1.0.13<\/h4>\n\n<ul>\n<li>Fixed: The configurable button\/label texts (withdrawal, confirm, cancel) were stored as English defaults, so they stayed English on non-English sites. They now fall back to a translatable default that follows the site language (until the merchant sets a custom value).<\/li>\n<li>Improved: Translations updated and completed for German, French, Italian, Spanish and Dutch \u2014 all current strings are now translated.<\/li>\n<li>Tested up to WordPress 7.0.<\/li>\n<\/ul>\n\n<h4>1.0.12<\/h4>\n\n<ul>\n<li>Security: the guest withdrawal search is now rate-limited per IP (default 10 attempts \/ 5 minutes, filterable) to prevent brute-forcing order number + email combinations.<\/li>\n<\/ul>\n\n<h4>1.0.11<\/h4>\n\n<ul>\n<li>Fixed: On the guest withdrawal search form, a failed search (wrong details or network error) reset the button label to a hardcoded German string (\"Bestellung suchen\") on non-German sites. The button now restores its original, localized label.<\/li>\n<\/ul>\n\n<h4>1.0.10<\/h4>\n\n<ul>\n<li>Fixed: Bundled translations (German, French, Italian, Spanish, Dutch) were never loaded, so the storefront always showed English. The plugin now loads its \/languages folder via load_plugin_textdomain() on init, so the front-end strings follow the site language.<\/li>\n<\/ul>\n\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>Security: the withdrawal-confirmation PDF download now requires admin rights, the logged-in order owner, or a valid order key \u2014 closing an access-control gap where guest-order PDFs (containing personal data) could be downloaded by enumerating withdrawal IDs.<\/li>\n<li>Hardening: the withdrawal log database layer now whitelists the order-by column\/direction and the updatable columns, so SQL identifiers can never originate from request input.<\/li>\n<li>Hardening: client IP detection now uses REMOTE_ADDR by default and only trusts proxy\/forwarding headers when explicitly enabled via the <code>revoker_trust_proxy_headers<\/code> filter (prevents IP spoofing in the audit log).<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Security: the guest withdrawal search now only succeeds when the order number AND email belong to the same order. The entered order number is re-checked against the resolved order (preventing a wrong number from resolving to a different order via ID coercion with custom order-number plugins), and a single generic error message no longer reveals whether an order number or email exists.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Added: \"Position in email\" setting \u2014 show the withdrawal section at the bottom of the order confirmation email (below the address, now the default) or directly under the order items.<\/li>\n<li>Improved: Heading spacing in the withdrawal form, policy and model-form output is now normalized so themes with large default heading margins no longer add excessive top spacing.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Added: Box position setting \u2014 show the withdrawal box below the billing\/shipping address on the order page (now the default) or directly under the order items.<\/li>\n<li>Added: Configurable admin notification recipient(s) \u2014 choose which email address(es) receive withdrawal notifications, with comma-separated support.<\/li>\n<li>Added: Order lookup now matches custom order numbers from Sequential Order Numbers \/ Sequential Order Numbers Pro and similar plugins (both _order_number and _order_number_formatted), plus a revoker_find_order_by_number filter.<\/li>\n<li>Added: Show\/hide toggles for the return address and the \"next steps\" section across the form, modal and confirmation email \u2014 useful for merchants who send a return label instead of receiving returns at their address.<\/li>\n<li>Added: Custom \"next steps\" text and a custom free-text block in the withdrawal box.<\/li>\n<li>Added: Withdrawal reasons are now configurable \u2014 toggle the reason selector and edit the list of reasons.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Fixed: Withdrawal log table was never created on activation, causing \"Error saving the withdrawal.\" for all withdrawals. The activation hook was registered too late (on <code>plugins_loaded<\/code>) to fire during plugin activation.<\/li>\n<li>Added: Self-healing database check that creates the table on existing installs affected by the activation bug, with no manual reactivation required.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Changed: Source language switched from German to English for WordPress.org GlotPress compatibility<\/li>\n<li>Added: German (de_DE) translation file with 100% coverage<\/li>\n<li>Updated: French (fr_FR), Spanish (es_ES), Italian (it_IT), Dutch (nl_NL) translations to 100% coverage<\/li>\n<li>Improved: All translatable strings now use English as source language (msgid)<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Fixed: Database insert failure when saving withdrawals (NULL datetime handling)<\/li>\n<li>Fixed: Modal on order confirmation page now shows item checkboxes for selection<\/li>\n<li>Fixed: Modal withdrawal submission now correctly sends selected items<\/li>\n<li>Added: Dedicated return address settings (company name, address, postcode, city)<\/li>\n<li>Improved: Return address in forms, emails, and withdrawal policy uses custom settings with WooCommerce fallback<\/li>\n<li>Improved: Error logging for failed database operations when WP_DEBUG is enabled<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Fixed: Escape all $withdrawal_period variables with absint()<\/li>\n<li>Fixed: Escape all $days_remaining variables with absint()<\/li>\n<li>Fixed: Escape $deadline and $withdrawal_url in plain text emails<\/li>\n<li>Fixed: Move PDF styles to external CSS file to avoid inline  tag<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fixed: Proper escaping of date_i18n() outputs<\/li>\n<li>Fixed: Use wp_enqueue functions for scripts and styles<\/li>\n<li>Fixed: Plugin URI now points to valid URL<\/li>\n<li>Added: Requires Plugins header for WooCommerce dependency<\/li>\n<li>Removed: WordPress.org directory assets from plugin package<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial stable release<\/li>\n<li>Withdrawal button on order details page<\/li>\n<li>Two-step withdrawal process<\/li>\n<li>Partial withdrawal of individual items<\/li>\n<li>Guest support via order search<\/li>\n<li>Email notifications (customer &amp; admin)<\/li>\n<li>Withdrawal log in backend<\/li>\n<li>Product and category exceptions<\/li>\n<li>Exclude digital downloads<\/li>\n<li>Customizable button style (standard, outline, text link)<\/li>\n<li>Configurable withdrawal period (7-365 days)<\/li>\n<li>PDF generation for withdrawal confirmations<\/li>\n<li>Gutenberg block for withdrawal policy<\/li>\n<li>Withdrawal reason selection<\/li>\n<li>HPOS compatibility<\/li>\n<li>Translations for 6 languages<\/li>\n<\/ul>","raw_excerpt":"EU-compliant withdrawal button for WooCommerce \u2013 enables customers to easily revoke orders in accordance with EU Directive 2023\/2673.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/277507","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=277507"}],"author":[{"embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kommers"}],"wp:attachment":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=277507"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=277507"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=277507"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=277507"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=277507"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=277507"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}