{"id":311450,"date":"2026-05-17T07:39:21","date_gmt":"2026-05-17T07:39:21","guid":{"rendered":"https:\/\/es.wordpress.org\/plugins\/wc-apg-withdrawal\/"},"modified":"2026-05-18T17:16:16","modified_gmt":"2026-05-18T17:16:16","slug":"apg-withdrawal-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/ml.wordpress.org\/plugins\/apg-withdrawal-for-woocommerce\/","author":12534269,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"0.3.0","stable_tag":"0.3.0","tested":"7.0","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"APG Withdrawal for WooCommerce","header_author":"Art Project Group","header_description":"Add to WooCommerce an online withdrawal workflow compliant with EU requirements.","assets_banners_color":"837e9c","last_updated":"2026-05-18 17:16:16","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/artprojectgroup.es\/tienda\/donacion","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/apg-withdrawal-for-woocommerce\/","header_author_uri":"https:\/\/artprojectgroup.es\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":89,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.0":{"tag":"0.1.0","author":"artprojectgroup","date":"2026-05-18 12:34:07"},"0.2.0":{"tag":"0.2.0","author":"artprojectgroup","date":"2026-05-18 13:53:45"},"0.3.0":{"tag":"0.3.0","author":"artprojectgroup","date":"2026-05-18 17:16:16"}},"upgrade_notice":{"0.3.0":"<ul>\n<li>New: digital-content withdrawal waiver checkbox at checkout, with a settings section to choose when to display it (disabled by default).<\/li>\n<\/ul>","0.2.0":"<ul>\n<li>Frontend form aligned with native WooCommerce notices, fields and buttons. Custom CSS overrides for the form may no longer be necessary.<\/li>\n<\/ul>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3534328,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3534328,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3534328,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3534328,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.0","0.2.0","0.3.0"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3536059,"resolution":"1","location":"assets","locale":"","width":2560,"height":4488},"screenshot-2.jpeg":{"filename":"screenshot-2.jpeg","revision":3535169,"resolution":"2","location":"assets","locale":"","width":1730,"height":2078},"screenshot-3.jpeg":{"filename":"screenshot-3.jpeg","revision":3535169,"resolution":"3","location":"assets","locale":"","width":1760,"height":2070},"screenshot-4.jpeg":{"filename":"screenshot-4.jpeg","revision":3535169,"resolution":"4","location":"assets","locale":"","width":1684,"height":2220},"screenshot-5.jpg":{"filename":"screenshot-5.jpg","revision":3535169,"resolution":"5","location":"assets","locale":"","width":2560,"height":2714},"screenshot-6.jpg":{"filename":"screenshot-6.jpg","revision":3535169,"resolution":"6","location":"assets","locale":"","width":2560,"height":2714}},"screenshots":{"1":"Plugin settings page with general options, automation rules and customer email notifications.","2":"Customer withdrawal form on the public page (guest checkout).","3":"Withdrawal form integrated in the My Account area with order selector.","4":"My Account orders list with the <em>Withdrawal request<\/em> action per order.","5":"Admin withdrawals list with status, scope and order reference.","6":"Edit withdrawal screen with full request details and status history."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[255182,9682,263226,245590,286],"plugin_category":[45],"plugin_contributors":[80963],"plugin_business_model":[],"class_list":["post-311450","plugin","type-plugin","status-publish","hentry","plugin_tags-consumer-rights","plugin_tags-refund","plugin_tags-right-of-withdrawal","plugin_tags-withdrawal","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-artprojectgroup","plugin_committers-artprojectgroup"],"banners":{"banner":"https:\/\/ps.w.org\/apg-withdrawal-for-woocommerce\/assets\/banner-772x250.jpg?rev=3534328","banner_2x":"https:\/\/ps.w.org\/apg-withdrawal-for-woocommerce\/assets\/banner-1544x500.jpg?rev=3534328","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/apg-withdrawal-for-woocommerce\/assets\/icon-128x128.png?rev=3534328","icon_2x":"https:\/\/ps.w.org\/apg-withdrawal-for-woocommerce\/assets\/icon-256x256.png?rev=3534328","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/apg-withdrawal-for-woocommerce\/assets\/screenshot-1.jpg?rev=3536059","caption":"Plugin settings page with general options, automation rules and customer email notifications."},{"src":"https:\/\/ps.w.org\/apg-withdrawal-for-woocommerce\/assets\/screenshot-2.jpeg?rev=3535169","caption":"Customer withdrawal form on the public page (guest checkout)."},{"src":"https:\/\/ps.w.org\/apg-withdrawal-for-woocommerce\/assets\/screenshot-3.jpeg?rev=3535169","caption":"Withdrawal form integrated in the My Account area with order selector."},{"src":"https:\/\/ps.w.org\/apg-withdrawal-for-woocommerce\/assets\/screenshot-4.jpeg?rev=3535169","caption":"My Account orders list with the <em>Withdrawal request<\/em> action per order."},{"src":"https:\/\/ps.w.org\/apg-withdrawal-for-woocommerce\/assets\/screenshot-5.jpg?rev=3535169","caption":"Admin withdrawals list with status, scope and order reference."},{"src":"https:\/\/ps.w.org\/apg-withdrawal-for-woocommerce\/assets\/screenshot-6.jpg?rev=3535169","caption":"Edit withdrawal screen with full request details and status history."}],"raw_content":"<!--section=description-->\n<p><strong>APG Withdrawal for WooCommerce<\/strong> adds to your WooCommerce store a complete online right of withdrawal workflow compliant with EU consumer protection legislation.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Customer withdrawal form via the <code>[apg_withdrawal_form]<\/code> shortcode.<\/li>\n<li>Configurable withdrawal window (days) and deadline source (completed or created date).<\/li>\n<li>Optional extra grace days on top of the standard withdrawal window.<\/li>\n<li>Active request detection: hides the withdrawal button if a request is already open for the order.<\/li>\n<li>Optional digital-content waiver checkbox at checkout (both classic shortcode and block-based checkout): a configurable selector chooses when to display it \u2014 never, only on virtual products (or per-product <code>_apg_withdrawal_type = digital<\/code>), on every order, or on selected categories and\/or selected products. The customer's choice is persisted to order meta as legal evidence.<\/li>\n<li>Admin request log with full request details (custom post type).<\/li>\n<li>IP address and browser identifier storage options for legal evidence.<\/li>\n<li>Email notification to the store admin on every new request.<\/li>\n<li>Automatic customer acknowledgement email on submission.<\/li>\n<li>Customer status update emails when the request is accepted, rejected or completed.<\/li>\n<li>Automation: updates the withdrawal request status automatically when the linked WooCommerce order changes status.<\/li>\n<li>My Account integration: customers can view their withdrawal request history.<\/li>\n<li>CSV export of all withdrawal requests.<\/li>\n<li>100% compatible with HPOS (High-Performance Order Storage).<\/li>\n<\/ul>\n\n<h4>Translations<\/h4>\n\n<ul>\n<li>English: by <a href=\"https:\/\/artprojectgroup.es\/\">Art Project Group<\/a> (default language).<\/li>\n<li>Spanish: by <a href=\"https:\/\/artprojectgroup.es\/\">Art Project Group<\/a>.<\/li>\n<\/ul>\n\n<h4>More information<\/h4>\n\n<p>You can learn more about <strong>APG Withdrawal for WooCommerce<\/strong> on our <a href=\"https:\/\/artprojectgroup.es\/plugins-para-woocommerce\/apg-withdrawal-for-woocommerce\">official website<\/a>, and follow the development on <a href=\"https:\/\/github.com\/artprojectgroup\/apg-withdrawal-for-woocommerce\">GitHub<\/a>.<\/p>\n\n<h3>Thanks<\/h3>\n\n<p>Thanks to everyone who uses the plugin, helps improve it, makes a donation or encourages us with their comments.<\/p>\n\n<p>If you find this plugin useful, you can support its development with a <a href=\"https:\/\/artprojectgroup.es\/tienda\/donacion\">small donation<\/a>.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to the WordPress.org Plugins API to fetch information about the plugin (such as the rating). It sends the plugin slug when requesting data. More information: https:\/\/wordpress.org\/about\/privacy\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install the plugin in one of the following ways:\n\n<ul>\n<li>Upload the <code>apg-withdrawal-for-woocommerce<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory via FTP.<\/li>\n<li>Upload the full ZIP file via <em>Plugins -&gt; Add New -&gt; Upload<\/em> in the WordPress administration panel.<\/li>\n<li>Search for <strong>APG Withdrawal for WooCommerce<\/strong> in <em>Plugins -&gt; Add New<\/em> and click <em>Install Now<\/em>.<\/li>\n<\/ul><\/li>\n<li>Activate the plugin through the <em>Plugins<\/em> menu in the WordPress administration panel.<\/li>\n<li>Configure the plugin in <em>WooCommerce -&gt; Withdrawal<\/em> or through the <em>Settings<\/em> link on the plugins page.<\/li>\n<li>Add the <code>[apg_withdrawal_form]<\/code> shortcode to the page configured as the withdrawal page in the settings.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20configure%20the%20plugin%3F\"><h3>How do I configure the plugin?<\/h3><\/dt>\n<dd><p>In the plugin settings you can configure the notification email, the withdrawal page, the withdrawal window in days, the deadline source (completed or created date), the extra grace days and which data to store (IP address, browser identifier).<\/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. The plugin is fully compatible with WooCommerce High-Performance Order Storage.<\/p><\/dd>\n<dt id=\"can%20guest%20customers%20submit%20a%20withdrawal%20request%3F\"><h3>Can guest customers submit a withdrawal request?<\/h3><\/dt>\n<dd><p>Yes. The form supports both logged-in customers (with pre-filled data and order selector) and guests (with email lookup of their orders).<\/p><\/dd>\n<dt id=\"where%20can%20i%20get%20support%3F\"><h3>Where can I get support?<\/h3><\/dt>\n<dd><p><strong>APG Withdrawal for WooCommerce<\/strong> is a free plugin. <strong>Art Project Group<\/strong> does not provide free technical support, but offers a paid <a href=\"https:\/\/artprojectgroup.es\/tienda\/ticket-de-soporte\">technical support<\/a> service for installation and configuration.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>New: digital-content withdrawal waiver checkbox at checkout. Customers buying digital content or virtual services see an optional acknowledgement that requesting the immediate supply waives their right of withdrawal (EU consumer protection requirement). The checkbox is informational; ticking it is not mandatory and does not block order placement.<\/li>\n<li>The checkbox is injected in both checkouts: classic shortcode (via <code>woocommerce_checkout_before_terms_and_conditions<\/code> with priority 999) and block-based (via JavaScript that reinserts itself with a <code>MutationObserver<\/code> to remain right before the native terms checkbox, after any other custom one).<\/li>\n<li>In the block checkout, a generic cleanup pass removes content injected next to our wrapper by third-party plugins whose selectors over-match (e.g. plugins using <code>.wp-block-woocommerce-checkout-terms-block .wc-block-components-checkbox<\/code> plus jQuery <code>.after()<\/code>), avoiding duplicated privacy or marketing notices.<\/li>\n<li>The customer's choice is persisted to order meta <code>_apg_withdrawal_digital_waiver<\/code> (<code>'1'<\/code> or <code>'0'<\/code>) on both checkouts: the classic checkout reads the POST value on <code>woocommerce_checkout_create_order<\/code>, the block checkout injects the value into the StoreAPI request body under <code>extensions['apg-withdrawal']['digital_waiver']<\/code> and the server hook <code>woocommerce_store_api_checkout_update_order_from_request<\/code> writes the same meta.<\/li>\n<li>The block-checkout script reacts to cart changes mid-checkout: it watches StoreAPI cart mutations and, via a nonced AJAX endpoint (<code>apg_withdrawal_check_cart_waiver<\/code>), re-checks server-side whether the current cart still qualifies, inserting or removing the checkbox without a full page reload.<\/li>\n<li>New settings section \"Digital content waiver\" with a single SelectWoo selector for when to show the checkbox: never (default), only on virtual products, on every order, or on products in selected categories or selected products (these two can be combined). Category and product selectors load only when relevant. The \"Only on virtual products\" mode also matches products with the per-product <code>_apg_withdrawal_type = digital<\/code> setting, so virtual flag and explicit digital classification are treated as equivalent triggers.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>The frontend form now inherits the native WooCommerce stylesheet (notices, fields, buttons) without requiring custom CSS overrides.<\/li>\n<li>Notices rendered with <code>wc_print_notice()<\/code> so they pick up the correct WooCommerce template for both block themes (<code>block-notices\/*.php<\/code>) and classic themes (<code>notices\/*.php<\/code>).<\/li>\n<li>Dynamic notices (order-not-found feedback and product warning) are pre-rendered server-side via <code>wc_print_notice()<\/code> and toggled by JavaScript, instead of being built by hand with legacy markup that breaks on block themes.<\/li>\n<li>Order-not-found feedback follows the native WooCommerce pattern: notice at the top of the form plus <code>woocommerce-invalid<\/code> class on the email field.<\/li>\n<li>Buttons use <code>wc_wp_theme_get_element_class_name( 'button' )<\/code> for theme and block-theme compatibility.<\/li>\n<li>Removed inline CSS injected from JavaScript in favour of native WooCommerce notice classes.<\/li>\n<li>Spanish translation updated to informal \"t\u00fa\" treatment as recommended by the WooCommerce style guide.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Add to WooCommerce an online withdrawal workflow with customer form, My Account integration and admin request log.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/311450","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=311450"}],"author":[{"embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/artprojectgroup"}],"wp:attachment":[{"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=311450"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=311450"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=311450"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=311450"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=311450"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=311450"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}