{"id":244698,"date":"2025-08-11T20:21:28","date_gmt":"2025-08-11T20:21:28","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/taxproof-coupons-for-woocommerce\/"},"modified":"2026-07-22T15:55:50","modified_gmt":"2026-07-22T15:55:50","slug":"taxproof-coupons-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/id.wordpress.org\/plugins\/taxproof-coupons-for-woocommerce\/","author":13783682,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.9","stable_tag":"1.0.9","tested":"7.0.2","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Tax\u2011Proof Coupons for WooCommerce","header_author":"Saskia Teichmann","header_description":"Ensure fixed-value coupons always apply after tax, regardless of VAT rate or customer location.","assets_banners_color":"c6bab4","last_updated":"2026-07-22 15:55:50","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/isla-stud.io\/donate\/","header_plugin_uri":"https:\/\/github.com\/s-a-s-k-i-a\/tax-proof-coupons","header_author_uri":"https:\/\/isla-stud.io","rating":5,"author_block_rating":0,"active_installs":40,"downloads":812,"num_ratings":2,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.3":{"tag":"1.0.3","author":"Jyria","date":"2025-08-11 20:22:14"},"1.0.4":{"tag":"1.0.4","author":"Jyria","date":"2025-10-20 19:33:48"},"1.0.5":{"tag":"1.0.5","author":"Jyria","date":"2026-03-07 02:38:56"},"1.0.7":{"tag":"1.0.7","author":"Jyria","date":"2026-07-22 13:55:19"},"1.0.8":{"tag":"1.0.8","author":"Jyria","date":"2026-07-22 15:10:48"},"1.0.9":{"tag":"1.0.9","author":"Jyria","date":"2026-07-22 15:55:50"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":2},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3622801,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3622801,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3622801,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3622801,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.3","1.0.4","1.0.5","1.0.7","1.0.8","1.0.9"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[326,331,2012,286],"plugin_category":[45],"plugin_contributors":[144282],"plugin_business_model":[],"class_list":["post-244698","plugin","type-plugin","status-publish","hentry","plugin_tags-coupon","plugin_tags-discount","plugin_tags-tax","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-jyria","plugin_committers-jyria"],"banners":{"banner":"https:\/\/ps.w.org\/taxproof-coupons-for-woocommerce\/assets\/banner-772x250.jpg?rev=3622801","banner_2x":"https:\/\/ps.w.org\/taxproof-coupons-for-woocommerce\/assets\/banner-1544x500.jpg?rev=3622801","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/taxproof-coupons-for-woocommerce\/assets\/icon-128x128.png?rev=3622801","icon_2x":"https:\/\/ps.w.org\/taxproof-coupons-for-woocommerce\/assets\/icon-256x256.png?rev=3622801","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Tax\u2011Proof Coupons for WooCommerce lets you define an eligible fixed-cart coupon as a gross amount: the amount your customer should actually see deducted after tax.<\/p>\n\n<h4>What does it do?<\/h4>\n\n<p>The plugin adds an <strong>Apply coupon after tax<\/strong> checkbox to the coupon editor. It can be enabled only for fixed-cart coupons. When the option is enabled, each part of the coupon is converted using the tax rate of the product line it discounts.<\/p>\n\n<p>For example, a 35.00 EUR coupon reduces eligible products by 35.00 EUR including tax, within the configured currency precision. WooCommerce still stores the required net discount and tax portion internally.<\/p>\n\n<p>This is useful when a fixed promotional value should not become larger or smaller merely because eligible products use different VAT rates or the customer's tax location changes.<\/p>\n\n<h4>What are the limits?<\/h4>\n\n<ul>\n<li>Only fixed-cart coupons with <strong>Apply coupon after tax<\/strong> enabled are changed. For other coupon types, the option is disabled and explains why it is unavailable; those coupons keep WooCommerce's native behavior.<\/li>\n<li>The effective discount cannot exceed the value of the eligible product lines. Shipping, fees, excluded products, and other non-discountable amounts do not increase that limit.<\/li>\n<li>Displayed and stored amounts follow WooCommerce's configured currency precision and rounding.<\/li>\n<li>The plugin does not choose tax rates, change product prices, replace a tax engine, or provide tax or legal advice.<\/li>\n<\/ul>\n\n<h4>Compatibility<\/h4>\n\n<p>Version 1.0.9 is tested with WordPress 7.0, WooCommerce 10.9.4, Checkout Block, High-Performance Order Storage (HPOS), Germanized 4.0.10, and Germanized Pro\/StoreaBill 4.3.4. The 1.0.9 admin change does not alter the invoice or coupon calculation paths verified with finalized StoreaBill PDFs in 1.0.8. Dedicated compatibility paths exist for WPML\/WooCommerce Multilingual and Germanized Pro\/StoreaBill. Compatibility still depends on the versions and configuration used by the store; report reproducible conflicts through the GitHub issue tracker or WordPress.org support forum.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>taxproof-coupons-for-woocommerce<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin from the <strong>Plugins<\/strong> screen in WordPress.<\/li>\n<li>In WooCommerce \u2192 Coupons, edit a fixed-cart coupon and check <strong>Apply coupon after tax<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"why%20is%20this%20needed%3F\"><h3>Why is this needed?<\/h3><\/dt>\n<dd><p>WooCommerce calculates fixed-cart discounts as net values before tax. If the amount entered by a shop owner is intended as a gross promotional value, its visible effect can otherwise vary with the applicable tax rate. This plugin performs the gross-to-net conversion for enabled coupons while leaving WooCommerce responsible for tax calculation.<\/p><\/dd>\n<dt id=\"do%20i%20need%20to%20recreate%20existing%20coupons%20after%20updating%3F\"><h3>Do I need to recreate existing coupons after updating?<\/h3><\/dt>\n<dd><p>No. Valid fixed-cart settings remain unchanged. If a coupon was changed to an unsupported type while an old after-tax flag remained stored, version 1.0.9 shows the option as disabled and removes that inactive flag the next time the coupon is saved.<\/p><\/dd>\n<dt id=\"why%20is%20the%20option%20unavailable%20for%20my%20coupon%3F\"><h3>Why is the option unavailable for my coupon?<\/h3><\/dt>\n<dd><p>The after-tax conversion currently supports fixed-cart coupons only. Percentage and fixed-product coupons keep WooCommerce's native behavior. Support for fixed-product coupons requires separate per-item calculations and is tracked in <a href=\"https:\/\/github.com\/s-a-s-k-i-a\/tax-proof-coupons\/issues\/18\">GitHub issue #18<\/a> for the 1.1.0 roadmap.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20the%20coupon%20is%20larger%20than%20the%20eligible%20products%3F\"><h3>What happens if the coupon is larger than the eligible products?<\/h3><\/dt>\n<dd><p>The discount is capped at the discountable gross value of the eligible product lines. It does not create a negative payable amount or consume shipping and fees merely to reach the configured coupon value.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20products%20that%20have%20different%20tax%20rates%3F\"><h3>Does it work with products that have different tax rates?<\/h3><\/dt>\n<dd><p>Yes. The plugin allocates the coupon across eligible product lines and converts each share using that line's tax rate. The final displayed value is subject to WooCommerce currency precision and rounding.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20change%20my%20tax%20rates%20or%20guarantee%20tax%20compliance%3F\"><h3>Does the plugin change my tax rates or guarantee tax compliance?<\/h3><\/dt>\n<dd><p>No. WooCommerce and the store's tax configuration determine the rates. The plugin only changes how an enabled fixed-cart coupon is converted into WooCommerce's net discount values. Store owners remain responsible for validating their tax and invoice setup.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.9<\/h4>\n\n<p>Release date: July 22, 2026<\/p>\n\n<ul>\n<li><strong>For store owners:<\/strong> The after-tax checkbox is now available only for fixed-cart coupons. Selecting another coupon type immediately disables and clears it and shows a plain-language explanation.<\/li>\n<li><strong>For developers:<\/strong> Enforce the fixed-cart restriction again during persistence, remove stale metadata for unsupported types, and reject malformed checkbox input.<\/li>\n<li>Added admin-state regressions plus real LocalWP coupon-editor, Cart Block, Checkout Block, tax-matrix, and release-content smoke coverage.<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<p>Release date: July 22, 2026<\/p>\n\n<ul>\n<li><strong>For store owners:<\/strong> Fixed a possible one-cent difference in StoreaBill's aggregate invoice discount for small gross coupons in mixed-tax orders. Invoice totals, taxes, and coupon settings remain unchanged.<\/li>\n<li><strong>For developers:<\/strong> Resolve StoreaBill's nested invoice\/order wrappers before reading persisted WooCommerce coupon metadata.<\/li>\n<li>Added a StoreaBill wrapper-contract regression and verified synchronized, finalized PDFs with Germanized Pro\/StoreaBill 4.3.4.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<p>Release date: July 22, 2026<\/p>\n\n<ul>\n<li><strong>For store owners:<\/strong> Added a plain-language explanation, a gross-discount example, clearer limits, and upgrade guidance. No coupon calculation or setting changed in this release.<\/li>\n<li><strong>For developers:<\/strong> Documented the exact WooCommerce calculation boundary and qualified compatibility claims.<\/li>\n<li>Corrected the installation folder name and historical release dates.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<p>Release date: July 22, 2026<\/p>\n\n<ul>\n<li><strong>For store owners:<\/strong> Fixed negative saved order totals in the WPML\/WCML path, mixed-tax carts, oversized coupons, and unstable results during repeated cart calculations.<\/li>\n<li><strong>For developers:<\/strong> Added per-line gross allocation, reset state for every WooCommerce coupon distribution, corrected the checkout coupon-item hook, and made persistence HPOS-safe.<\/li>\n<li>Preserved native WooCommerce behavior when catalog prices include tax.<\/li>\n<li>Added automated unit, cart, Checkout Block, HPOS, Advanced Dynamic Pricing, and WPML-contract regression tests.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<p>Release date: March 7, 2026<\/p>\n\n<ul>\n<li>Refactored the plugin into a cleaner core service plus isolated WPML and StoreaBill compatibility layers.<\/li>\n<li>Fixed fixed-cart coupons whose configured gross amount is larger than the discountable cart total.<\/li>\n<li>Removed release-time debug logging and broad total-manipulation hooks that caused rounding drift in edge cases.<\/li>\n<li>Persist the gross, net, and tax components on order coupon items so Germanized Pro \/ StoreaBill can invoice consistently.<\/li>\n<li>Keep the displayed coupon amount capped to the effective gross discount that can actually be applied.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<p>Release date: October 20, 2025<\/p>\n\n<ul>\n<li><strong>Verbesserte Pr\u00e4zision<\/strong>: Neue pr\u00e4zise Berechnungsmethode f\u00fcr exakte Steuerumrechnungen<\/li>\n<li><strong>Erweiterte Anzeige-Funktionen<\/strong>: Verbesserte Coupon-Anzeige im Warenkorb und Checkout<\/li>\n<li><strong>StoreaBill\/Germanized Pro Integration<\/strong>: Vollst\u00e4ndige Kompatibilit\u00e4t mit Germanized Pro f\u00fcr Rechnungsgenerierung<\/li>\n<li><strong>Admin-Verbesserungen<\/strong>: Detaillierte Anzeige von Netto- und Bruttobetr\u00e4gen in der WooCommerce Admin-Oberfl\u00e4che<\/li>\n<li><strong>Erweiterte Metadaten-Speicherung<\/strong>: Pr\u00e4zise Speicherung von Coupon-Betr\u00e4gen mit hoher Genauigkeit<\/li>\n<li><strong>Debug-Funktionen<\/strong>: Erweiterte Logging-Funktionen f\u00fcr bessere Entwicklung und Fehlerbehebung<\/li>\n<li><strong>Hook-Integration<\/strong>: Neue Hooks f\u00fcr bessere Integration mit WooCommerce und Drittanbieter-Plugins<\/li>\n<li><strong>Performance-Optimierungen<\/strong>: Verbesserte Berechnungslogik f\u00fcr komplexe Steuerszenarien<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<p>Release date: August 11, 2025<\/p>\n\n<ul>\n<li>Ensuring unique namespace<\/li>\n<li>Added Requires plugins plugin header<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<p>Release date: July 25th 2025<\/p>\n\n<ul>\n<li>Fixed class and method visibility issues.<\/li>\n<li>Ensured coupon only applies once per order.<\/li>\n<li>Initial implementation of gross-to-net conversion for fixed-cart coupons.<\/li>\n<\/ul>","raw_excerpt":"Apply selected fixed-cart coupons as gross discounts across eligible WooCommerce products, including mixed tax rates.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/244698","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=244698"}],"author":[{"embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/jyria"}],"wp:attachment":[{"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=244698"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=244698"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=244698"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=244698"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=244698"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=244698"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}