{"id":378900,"date":"2026-10-07T00:59:18","date_gmt":"2026-10-07T00:59:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/byticslab-conditional-offers-for-woocommerce\/"},"modified":"2026-10-10T14:24:20","modified_gmt":"2026-10-10T14:24:20","slug":"byticslab-conditional-offers-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/ar.wordpress.org\/plugins\/byticslab-conditional-offers-for-woocommerce\/","author":23538048,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.5","stable_tag":"1.0.5","tested":"7.1.3","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"ByticsLab Conditional Offers for WooCommerce","header_author":"ByticsLab","header_description":"A rule-driven conditional promotions engine for WooCommerce \u2014 Buy X Get Y, spend-based free gifts, category offers, and more, built on a promotion engine that evaluates admin-defined condition trees rather than one-off code paths per offer type.","assets_banners_color":"1d6198","last_updated":"2026-10-10 14:24:20","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/paypal.me\/lklalitesh","header_plugin_uri":"https:\/\/www.byticslab.com\/plugins\/conditional-offers-for-woocommerce\/","header_author_uri":"https:\/\/www.byticslab.com\/","rating":5,"author_block_rating":0,"active_installs":0,"downloads":290,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":{"1.0.3":{"tag":"1.0.3","author":"tripleten","date":"2026-10-08 10:29:25","revision":3734277},"1.0.4":{"tag":"1.0.4","author":"tripleten","date":"2026-10-08 10:29:25","revision":3734277},"1.0.5":{"tag":"1.0.5","author":"tripleten","date":"2026-10-10 14:24:20","revision":3738146}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3731719,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3731719,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3731719,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3731719,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.3","1.0.4","1.0.5"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3731719,"resolution":"1","location":"assets","locale":"","width":1992,"height":1288},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3731719,"resolution":"2","location":"assets","locale":"","width":1982,"height":1316},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3731719,"resolution":"3","location":"assets","locale":"","width":1992,"height":1316},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3731719,"resolution":"4","location":"assets","locale":"","width":1986,"height":1290},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3731719,"resolution":"5","location":"assets","locale":"","width":2090,"height":1256}},"screenshots":{"1":"Choosing a promotion type \u2014 five guided builders, each naming the condition\/reward pair it uses under the hood.","2":"The promotion editor filled in for a real \"Buy X Get Y\" promotion \u2014 trigger product, quantity, and gift product\/quantity.","3":"The Promotions list, showing several active promotions with their type, status, priority, and usage.","4":"The Analytics tab \u2014 gifts awarded, orders with a promotion, and estimated gift value, with real currency formatting.","5":"A real storefront cart with a promotion-triggered gift line (a free product alongside its normal savings badge)."}},"plugin_section":[],"plugin_tags":[132597,6744,65403,2649,286],"plugin_category":[45],"plugin_contributors":[277493],"plugin_business_model":[],"class_list":["post-378900","plugin","type-plugin","status-publish","hentry","plugin_tags-buy-one-get-one","plugin_tags-discounts","plugin_tags-free-gift","plugin_tags-promotions","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-tripleten","plugin_committers-tripleten"],"banners":{"banner":"https:\/\/ps.w.org\/byticslab-conditional-offers-for-woocommerce\/assets\/banner-772x250.png?rev=3731719","banner_2x":"https:\/\/ps.w.org\/byticslab-conditional-offers-for-woocommerce\/assets\/banner-1544x500.png?rev=3731719","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/byticslab-conditional-offers-for-woocommerce\/assets\/icon-128x128.png?rev=3731719","icon_2x":"https:\/\/ps.w.org\/byticslab-conditional-offers-for-woocommerce\/assets\/icon-256x256.png?rev=3731719","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/byticslab-conditional-offers-for-woocommerce\/assets\/screenshot-1.png?rev=3731719","caption":"Choosing a promotion type \u2014 five guided builders, each naming the condition\/reward pair it uses under the hood."},{"src":"https:\/\/ps.w.org\/byticslab-conditional-offers-for-woocommerce\/assets\/screenshot-2.png?rev=3731719","caption":"The promotion editor filled in for a real \"Buy X Get Y\" promotion \u2014 trigger product, quantity, and gift product\/quantity."},{"src":"https:\/\/ps.w.org\/byticslab-conditional-offers-for-woocommerce\/assets\/screenshot-3.png?rev=3731719","caption":"The Promotions list, showing several active promotions with their type, status, priority, and usage."},{"src":"https:\/\/ps.w.org\/byticslab-conditional-offers-for-woocommerce\/assets\/screenshot-4.png?rev=3731719","caption":"The Analytics tab \u2014 gifts awarded, orders with a promotion, and estimated gift value, with real currency formatting."},{"src":"https:\/\/ps.w.org\/byticslab-conditional-offers-for-woocommerce\/assets\/screenshot-5.png?rev=3731719","caption":"A real storefront cart with a promotion-triggered gift line (a free product alongside its normal savings badge)."}],"raw_content":"<!--section=description-->\n<p>Turn \"buy this, get that free\" into an automatic promotion \u2014 no coding, no third-party tools. Set it up once in a few clicks, and the plugin handles the rest: checking every cart, applying the right free gift, enforcing limits, and tracking results.<\/p>\n\n<p>Plugin homepage: https:\/\/www.byticslab.com\/plugins\/conditional-offers-for-woocommerce\/<\/p>\n\n<h4>Promotion types<\/h4>\n\n<p>Pick one of five guided promotion types. Each one asks you for plain, simple details \u2014 no technical setup.<\/p>\n\n<ul>\n<li><strong>Buy X Get Y<\/strong> \u2014 Buy a quantity of one product, get another product free.\n<em>Example: Buy 2 water bottles, get 1 free.<\/em><\/li>\n<li><strong>Spend X Get Y<\/strong> \u2014 Spend a set amount in the cart, get a free product.\n<em>Example: Spend $50, get a free tote bag.<\/em><\/li>\n<li><strong>Buy From Category<\/strong> \u2014 Buy anything from a chosen category, get a free product.\n<em>Example: Buy any pair of shoes, get free socks.<\/em><\/li>\n<li><strong>Spend X in Category<\/strong> \u2014 Spend a set amount within one category, get a free product.\n<em>Example: Spend $100 on electronics, get a free charger.<\/em><\/li>\n<li><strong>Choose Your Gift<\/strong> \u2014 Spend a set amount, and let the customer pick their own free gift from a list.\n<em>Example: Spend $75, choose any one of three gifts.<\/em><\/li>\n<\/ul>\n\n<h4>Built for real stores<\/h4>\n\n<ul>\n<li>Works with both the classic cart\/checkout and WooCommerce Blocks.<\/li>\n<li>Usage limits \u2014 storewide or per customer \u2014 so a promotion can't be over-claimed.<\/li>\n<li>An Analytics tab shows gifts awarded, orders affected, and estimated value given away, in your store's own currency.<\/li>\n<li>A \"Test Promotion\" tool lets you simulate a cart and confirm a promotion works before it goes live.<\/li>\n<li>Thoroughly tested with hundreds of automated tests covering real checkout scenarios.<\/li>\n<li>Fully compatible with WooCommerce's High-Performance Order Storage (HPOS).<\/li>\n<li>Translation-ready, and built to respect customer privacy (data export\/erase support included).<\/li>\n<\/ul>\n\n<p>Built and maintained by ByticsLab \u2014 https:\/\/www.byticslab.com<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/byticslab-conditional-offers-for-woocommerce<\/code>, or install directly through the WordPress admin (Plugins \u2192 Add New \u2192 Upload Plugin).<\/li>\n<li>Activate the plugin through the \"Plugins\" screen in WordPress.<\/li>\n<li>Requires WooCommerce 8.9 or later to be installed and active.<\/li>\n<\/ol>\n\n<h4>Multisite<\/h4>\n\n<p>This plugin is site-scoped only: it does not support Network Activation, and activation will be refused with an explanatory notice if attempted network-wide. On a multisite install, activate it individually on each site that needs it, via that site's own Plugins screen. Each site gets its own independent set of promotions, settings, and database tables \u2014 nothing is shared network-wide.<\/p>\n\n<!--section=changelog-->\n<h4>1.0.5<\/h4>\n\n<p><strong>Promotion messages, rebuilt:<\/strong>\n* New: the promotion editor now has four separate, admin-editable message fields \u2014 before qualifying, qualified, gift added, and expired \u2014 each supporting <code>{remaining}<\/code>, <code>{gift_name}<\/code>, <code>{gift_quantity}<\/code>, and <code>{promotion_name}<\/code> placeholders filled in live with the real, current value.\n* Improved: every message now shows your own text exactly as written, with no English wrapper glued on \u2014 a promotion titled in any other language now displays correctly.\n* Improved: the \"qualified\" message is now a real confirmation naming the actual free gift (e.g. \"You've unlocked: 1 free Cap!\"), visually distinguished (green background, checkmark) from the \"not yet qualified\" one.\n* New: the \"gift added\" and \"offer has ended\" messages now actually display, as a cart notice at the right moment \u2014 on the classic cart\/checkout (Blocks Cart\/Checkout support is planned for a future release).<\/p>\n\n<p><strong>Fixes:<\/strong>\n* Fixed: the cart-page \"you've unlocked\" \/ \"add more to unlock\" message and progress bar now actually appear on the classic cart \u2014 a bug meant this had never worked on a real storefront visit.\n* Fixed: the \"FREE GIFT\" badge in the Mini-Cart drawer no longer shows as raw, unstyled HTML text.\n* Fixed: a quantity-based promotion's \"add more to unlock\" message now shows a plain count (\"add 2 more\") instead of a currency amount.\n* Fixed: a promotion message no longer names an out-of-stock or otherwise unavailable product as a free gift choice, and gift-quantity placeholders now reflect what you actually configured.\n* Fixed: cart\/mini-cart\/product-page messages correctly stay hidden once you've turned the plugin off in Settings.<\/p>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Fixed: the \"FREE GIFT\" badge and the cart-page promotion messages\/progress bar now also appear when your store's Cart page uses the WooCommerce Blocks cart (previously these only showed on the classic cart \u2014 a Blocks cart showed the free gift with no indication of why it was free, or that a promotion existed at all).<\/li>\n<li>No other changes \u2014 this release targets Blocks-cart parity only.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Fixed: the order-edit screen now shows a friendly \"Promotion gift: <code>&lt;name&gt;<\/code>\" line instead of raw internal meta keys.<\/li>\n<li>Fixed: Analytics figures now display with your store's own currency symbol.<\/li>\n<li>Improved: a persistent navigation bar lets you move between Promotions, Analytics, and Settings from any screen.<\/li>\n<li>Improved: redesigned Analytics summary cards for better readability.<\/li>\n<li>Improved: consistent header and page layout across every admin screen.<\/li>\n<li>Improved: the promotion editor groups related fields (status\/priority, product\/quantity, etc.) onto the same row, with clearer labels and a helpful example placeholder.<\/li>\n<li>Improved: admin notices for a missing or outdated WooCommerce install are now shown only to users who can act on them.<\/li>\n<li>Now built and maintained by ByticsLab.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Fixed across three further independent review rounds on the reservation\/confirmation\/release integrity path (3 P1 + 1 P2 + 1 P3 finding overall) \u2014 multi-promotion confirmation and confirmed-usage release made genuinely atomic (single-transaction, no compensating-call window), counter-decrement failures no longer ignored anywhere, stale <code>.pot<\/code>\/<code>package-lock.json<\/code> metadata regenerated. 587 tests total across 11 suites. Full details: <code>CHANGELOG.md<\/code> in this plugin's own folder.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fixed after a further independent review (4 P1 + 4 P2 findings) \u2014 reservation TTL not refreshing on idempotent retry, privacy export\/erasure pagination stopping after 10 orders, a non-deadlock reservation INSERT failure corrupting counters, the compiled admin bundle shipping with no source, usage confirmation failing open, analytics conflating uses with gift quantity, untranslatable admin UI strings, and an oversized readme. 548 tests total across 11 suites. Full details: <code>CHANGELOG.md<\/code> in this plugin's own folder.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Phase 12 (per-request query memoization eliminating a duplicate cart-hot-path SQL query) and Phase 13 (packaging: <code>README.md<\/code>, <code>samples\/<\/code>, the translation <code>.pot<\/code> file, <code>load_plugin_textdomain()<\/code>, and a verified real-install packaging test) \u2014 529 tests total across 11 suites. Full details: <code>CHANGELOG.md<\/code> in this plugin's own folder.<\/li>\n<\/ul>\n\n<h4>0.12.0<\/h4>\n\n<ul>\n<li>Fixed after an independent review of Phases 8-11 (3 P1 + 5 P2 findings) \u2014 Blocks checkout bypassing the usage\/order lifecycle, non-atomic usage confirmation, missing privacy export\/erase\/retention, reservation-lifecycle timing, an unavailable gift still listed as choosable, the missing analytics screen, weak nested-field REST validation, and a failing JS lint gate. 525 tests total across 11 suites. Full details: <code>CHANGELOG.md<\/code> in this plugin's own folder.<\/li>\n<\/ul>\n\n<p>For the complete version history (every release back to 0.1.0), see <code>CHANGELOG.md<\/code> in this plugin's own folder.<\/p>","raw_excerpt":"A rule-driven conditional promotions engine for WooCommerce \u2014 Buy X Get Y, spend-based free gifts, category offers, and more.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/378900","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=378900"}],"author":[{"embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/tripleten"}],"wp:attachment":[{"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=378900"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=378900"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=378900"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=378900"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=378900"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=378900"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}