{"id":368516,"date":"2026-09-26T11:08:19","date_gmt":"2026-09-26T11:08:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/bundlecraft-for-woocommerce\/"},"modified":"2026-10-07T01:22:34","modified_gmt":"2026-10-07T01:22:34","slug":"bundixo-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/snd.wordpress.org\/plugins\/bundixo-for-woocommerce\/","author":23404491,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.1.3","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Bundixo for WooCommerce","header_author":"Betatech","header_description":"Build product bundle promotions with tiered quantity discounts \u2014 Gutenberg block, shortcode, Vue-powered admin, analytics, and a customer-facing bundle builder widget.","assets_banners_color":"0c130d","last_updated":"2026-10-07 01:22:34","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/ashawkat\/bundixo-for-woocommerce","header_author_uri":"https:\/\/betatech.co","rating":0,"author_block_rating":0,"active_installs":0,"downloads":256,"num_ratings":0,"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":"betatech","date":"2026-09-26 11:07:47","revision":3714155},"1.0.4":{"tag":"1.0.4","author":"betatech","date":"2026-09-26 11:13:49","revision":3714161},"1.1.0":{"tag":"1.1.0","author":"betatech","date":"2026-10-07 01:22:34","revision":3731729}},"upgrade_notice":{"1.1.0":"<p>New: show any bundle automatically on product pages as a &quot;frequently bought together&quot; offer. Existing bundles are unaffected until you enable it.<\/p>","1.0.4":"<p>Readme fix: corrected the contributor handle.<\/p>","1.0.2":"<p>Documentation update: source code repository link and build instructions.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3714155,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3714155,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3714155,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3714155,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"bundixo\/bundle":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"bundixo\/bundle","title":"Bundixo Bundle","category":"woocommerce","description":"Display a Bundixo bundle builder widget with tiered quantity discounts.","keywords":["bundle","bundixo","woocommerce","discount"],"textdomain":"bundixo-for-woocommerce","attributes":{"bundleId":{"type":"integer","default":0},"layout":{"type":"string","default":""}},"supports":{"html":false,"customClassName":false,"multiple":true},"editorScript":"bundixo-block-editor","editorStyle":"bundixo-frontend"}},"tagged_versions":["1.0.3","1.0.4","1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3714155,"resolution":"1","location":"assets","locale":"","width":1280,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3714155,"resolution":"2","location":"assets","locale":"","width":1280,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3714155,"resolution":"3","location":"assets","locale":"","width":1280,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3714155,"resolution":"4","location":"assets","locale":"","width":1440,"height":1011},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3714155,"resolution":"5","location":"assets","locale":"","width":1440,"height":744},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3731729,"resolution":"6","location":"assets","locale":"","width":604,"height":758},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3731729,"resolution":"7","location":"assets","locale":"","width":1250,"height":826}},"screenshots":{"1":"Bundle editor with product picker, drag-and-drop ordering, and a live preview of the storefront widget.","2":"Tiered discount builder: set quantity thresholds and percentage discounts.","3":"Analytics dashboard: coupons, revenue, orders, cart share, and top bundles with date-range filtering.","4":"Storefront bundle widget: quantity steppers, unlocked tiers, and a live summary with the discount applied.","5":"Native Gutenberg block: insert the \"Bundixo Bundle\" block with an in-editor preview.","6":"Frequently bought together on a product page: the viewed product is the pre-selected anchor at full price, recommended products unlock the tiered discount, with live bundle price and savings.","7":"Placement tab: where the offer appears (follow the bundle's products, every product page, or pinned pages) and whether the offer uses the bundle's products or recommended ones."}},"plugin_section":[],"plugin_tags":[14503,331,73298,243191,286],"plugin_category":[45],"plugin_contributors":[177758,250667],"plugin_business_model":[],"class_list":["post-368516","plugin","type-plugin","status-publish","hentry","plugin_tags-bundle","plugin_tags-discount","plugin_tags-product-bundles","plugin_tags-quantity-discount","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-adnanshawkat","plugin_contributors-betatech","plugin_committers-betatech"],"banners":{"banner":"https:\/\/ps.w.org\/bundixo-for-woocommerce\/assets\/banner-772x250.png?rev=3714155","banner_2x":"https:\/\/ps.w.org\/bundixo-for-woocommerce\/assets\/banner-1544x500.png?rev=3714155","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/bundixo-for-woocommerce\/assets\/icon-128x128.png?rev=3714155","icon_2x":"https:\/\/ps.w.org\/bundixo-for-woocommerce\/assets\/icon-256x256.png?rev=3714155","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/bundixo-for-woocommerce\/assets\/screenshot-1.png?rev=3714155","caption":"Bundle editor with product picker, drag-and-drop ordering, and a live preview of the storefront widget."},{"src":"https:\/\/ps.w.org\/bundixo-for-woocommerce\/assets\/screenshot-2.png?rev=3714155","caption":"Tiered discount builder: set quantity thresholds and percentage discounts."},{"src":"https:\/\/ps.w.org\/bundixo-for-woocommerce\/assets\/screenshot-3.png?rev=3714155","caption":"Analytics dashboard: coupons, revenue, orders, cart share, and top bundles with date-range filtering."},{"src":"https:\/\/ps.w.org\/bundixo-for-woocommerce\/assets\/screenshot-4.png?rev=3714155","caption":"Storefront bundle widget: quantity steppers, unlocked tiers, and a live summary with the discount applied."},{"src":"https:\/\/ps.w.org\/bundixo-for-woocommerce\/assets\/screenshot-5.png?rev=3714155","caption":"Native Gutenberg block: insert the \"Bundixo Bundle\" block with an in-editor preview."},{"src":"https:\/\/ps.w.org\/bundixo-for-woocommerce\/assets\/screenshot-6.png?rev=3731729","caption":"Frequently bought together on a product page: the viewed product is the pre-selected anchor at full price, recommended products unlock the tiered discount, with live bundle price and savings."},{"src":"https:\/\/ps.w.org\/bundixo-for-woocommerce\/assets\/screenshot-7.png?rev=3731729","caption":"Placement tab: where the offer appears (follow the bundle's products, every product page, or pinned pages) and whether the offer uses the bundle's products or recommended ones."}],"raw_content":"<!--section=description-->\n<p>Bundixo lets you group products into attractive bundle promotions. Shoppers pick products (or set quantities), watch their savings grow as they reach discount tiers, and add the whole bundle to the cart in one click. Discounts are applied with real WooCommerce coupons, so totals are correct in every cart, sidecart, and checkout view.<\/p>\n\n<p>Place bundles anywhere with the <strong>native Gutenberg block<\/strong> (with an in-editor preview and automatic shortcode conversion) or the classic <code>[bundixo_bundle id=\"123\"]<\/code> shortcode.<\/p>\n\n<p><strong>Highlights<\/strong><\/p>\n\n<ul>\n<li>Frequently bought together: show any bundle automatically on product pages \u2014 right after the Add to Cart button. The viewed product is the anchor: pre-selected, added at full price, never counting toward the discount tiers.<\/li>\n<li>Place by rule: follow the bundle's own products, pin to additional product pages, or show on every product page \u2014 tailored placements always win over catch-alls.<\/li>\n<li>Recommended mode: offers with no fixed product list that fill automatically from each viewed product's cross-sells (fallbacks: upsells, same-category products). No external service \u2014 all data stays on your store.<\/li>\n<li>Compact FBT layout (checkbox rows, live bundle price and savings) or the full bundle builder; pick per bundle, and force either with the <code>style<\/code> shortcode attribute or block option.<\/li>\n<li>Tiered quantity discounts: \"Buy 2+ get 10% off, 3+ get 15% off\u2026\" with a live progress bar for shoppers.<\/li>\n<li>Quantity mode with per-product steppers or a simple select-all checkbox mode.<\/li>\n<li>Full control over texts, button label, and five theme colors \u2014 with a live preview in the editor.<\/li>\n<li>Product search with drag-and-drop ordering for bundle contents.<\/li>\n<li>Variable products supported: shoppers choose variations inside the widget.<\/li>\n<li>Cart behavior per bundle: open the cart\/sidecart or redirect to the cart page.<\/li>\n<li>Gutenberg block and shortcode placement, in posts, pages, and block-based widget areas.<\/li>\n<li>Analytics dashboard: coupons created, bundle revenue, orders, cart share, and top bundles over time.<\/li>\n<li>Health-check diagnostics page and optional WooCommerce debug logging.<\/li>\n<li>Built with Vue 3 and the WordPress REST API; all pricing math runs server-side.<\/li>\n<\/ul>\n\n<p><strong>Coming soon<\/strong><\/p>\n\n<p>First-class widgets for Elementor, Bricks, and other page builders are on the roadmap.<\/p>\n\n<p><strong>Discounts that stay correct<\/strong><\/p>\n\n<p>Bundle discounts are implemented as dynamically created WooCommerce coupons, restricted to the bundle's products and recalculated server-side from live product prices. They show up naturally in cart totals, emails, and orders \u2014 and expire automatically if unused.<\/p>\n\n<p><strong>Privacy<\/strong><\/p>\n\n<p>Bundixo does not send data to any third-party service. All processing happens on your own site.<\/p>\n\n<p><strong>Development and source code<\/strong><\/p>\n\n<p>The JavaScript and CSS files in <code>assets\/build\/<\/code> are generated (minified) bundles. The human-readable source code \u2014 a Vue 3 application built with <a href=\"https:\/\/vitejs.dev\/\">Vite<\/a> \u2014 is maintained in the public repository at https:\/\/github.com\/ashawkat\/bundixo-for-woocommerce (see the <code>src\/<\/code> directory). Clone the repository and run <code>npm install &amp;&amp; npm run build<\/code> to regenerate the bundles.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install WooCommerce (required) and Bundixo through the Plugins screen, then activate Bundixo.<\/li>\n<li>Go to <strong>Bundixo \u2192 Bundles<\/strong> and create your first bundle: add products, set discount tiers, style it, and save.<\/li>\n<li>Place the shortcode <code>[bundixo_bundle id=\"1\"]<\/code> in any post, page, or builder section.<\/li>\n<li>Optionally review <strong>Bundixo \u2192 Analytics<\/strong> and <strong>Bundixo \u2192 Settings<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20are%20the%20discounts%20calculated%3F\"><h3>How are the discounts calculated?<\/h3><\/dt>\n<dd><p>Server-side, always. When a shopper changes their selection the widget asks the store for a fresh quote; when the bundle is added to the cart the exact same calculation runs again and a matching WooCommerce coupon is applied. The browser never decides the discount.<\/p><\/dd>\n<dt id=\"how%20do%20i%20place%20a%20bundle%20on%20a%20page%3F\"><h3>How do I place a bundle on a page?<\/h3><\/dt>\n<dd><p>Three ways: insert the <strong>Bundixo Bundle<\/strong> block in the Gutenberg editor (it shows an in-editor preview), use the classic shortcode <code>[bundixo_bundle id=\"123\"]<\/code>, or \u2014 new in 1.1.0 \u2014 let Bundixo place it for you: open the bundle's <strong>Placement<\/strong> tab, enable \"Show automatically on product pages\", and pick a position (after the Add to Cart button, before the tabs, or after related products). The bundle then appears on the product pages of its own products, plus any extra products you assign, with the viewed product pre-selected. Pasting the shortcode into the block editor converts it into the block automatically.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20variable%20products%3F\"><h3>Does it work with variable products?<\/h3><\/dt>\n<dd><p>Yes. Variable products show a variation dropdown inside the bundle widget and the chosen variation is added to the cart.<\/p><\/dd>\n<dt id=\"can%20i%20use%20my%20own%20theme%20or%20a%20sidecart%20plugin%3F\"><h3>Can I use my own theme or a sidecart plugin?<\/h3><\/dt>\n<dd><p>The widget ships with neutral styling that inherits your theme's typography. After adding to cart, Bundixo refreshes classic cart fragments and the WooCommerce Blocks cart store, and tries to open popular sidecarts. Use the <code>bundixo_should_enqueue_frontend_assets<\/code> filter if you need custom asset loading.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20unused%20discount%20coupons%3F\"><h3>What happens to unused discount coupons?<\/h3><\/dt>\n<dd><p>A daily cleanup task deletes bundle coupons that were created more than 24 hours ago and never used. Used coupons are kept for order history and analytics.<\/p><\/dd>\n<dt id=\"i%20used%20an%20older%20%22mix%20%26%20match%22%2F%22bundle%20builder%22%20plugin%20from%20the%20same%20author.%20will%20my%20bundles%20be%20kept%3F\"><h3>I used an older \"Mix &amp; Match\"\/\"Bundle Builder\" plugin from the same author. Will my bundles be kept?<\/h3><\/dt>\n<dd><p>Yes. On activation, Bundixo migrates bundles and settings from the legacy table automatically.<\/p><\/dd>\n<dt id=\"where%20is%20the%20source%20code%20for%20the%20javascript%20and%20css%20bundles%3F\"><h3>Where is the source code for the JavaScript and CSS bundles?<\/h3><\/dt>\n<dd><p>The files in <code>assets\/build\/<\/code> are generated with Vite from human-readable Vue 3 source. The full unminified source and build tooling are publicly available at https:\/\/github.com\/ashawkat\/bundixo-for-woocommerce \u2014 the source lives in the <code>src\/<\/code> directory, and running <code>npm install &amp;&amp; npm run build<\/code> in the repository root regenerates the bundles. The <code>src\/<\/code> directory is also included in the plugin package.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: frequently bought together \u2014 automatic bundle placement on single product pages (after the Add to Cart button, before the tabs, or after related products).<\/li>\n<li>New \"Placement\" tab per bundle: auto-display toggle, position, own-product pages, extra product pages, and widget layout.<\/li>\n<li>New compact FBT widget layout with the viewed product pre-selected, tier progress, and live bundle price\/savings.<\/li>\n<li>Anchor pricing: on product pages the viewed product is always the anchor \u2014 pre-selected, full price, never counting toward tiers.<\/li>\n<li>New placement rules: \"every product page\" catch-all, and a recommended mode that fills the offer from the viewed product's cross-sells (fallbacks: upsells, same-category).<\/li>\n<li>Clearer Placement tab with a \"Where should this offer appear?\" section explaining each rule.<\/li>\n<li>Shortcode <code>style<\/code> attribute (<code>[bundixo_bundle id=\"123\" style=\"compact\"]<\/code>) and a matching Gutenberg block layout option.<\/li>\n<li>A bundle renders only once per page when automatic placement and a manual shortcode overlap (filterable via <code>bundixo_allow_duplicate_renders<\/code>).<\/li>\n<li>Fixed: guest carts built through the widget were lost on the next page load because the WooCommerce session cookie was never sent with the add-to-cart response.<\/li>\n<li>Fixed: critical error when removing cart items left the session referencing a bundle coupon that could no longer be applied \u2014 coupon re-apply is now re-entrancy-guarded and drops stale references.<\/li>\n<li>Database schema 1.3: adds the <code>placement<\/code> column. Existing bundles keep manual-only placement.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Corrected the WordPress.org contributor handle in the readme.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Removed the <code>.wordpress-org<\/code> assets folder from the distribution package (plugin review feedback); screenshots and banners remain available in the public repository.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Added a public source repository link and build instructions to the readme (WordPress.org Guideline 4: human-readable code).<\/li>\n<li>Included the unminified <code>src\/<\/code> directory in the plugin package alongside the generated bundles.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Rebranded the plugin to Bundixo for WooCommerce.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: bundle builder with tiered discounts, storefront widget, analytics dashboard, diagnostics, and REST API back end.<\/li>\n<\/ul>","raw_excerpt":"Build bundle promotions with tiered quantity discounts and automatic frequently-bought-together offers on product pages.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/368516","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=368516"}],"author":[{"embeddable":true,"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/betatech"}],"wp:attachment":[{"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=368516"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=368516"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=368516"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=368516"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=368516"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=368516"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}