=== BundleBoss - Product Bundles, Mix and Match & Build a Box for WooCommerce ===
Contributors: bundleboss
Tags: product bundles, mix and match, build a box, bundle discount, product configurator
Requires at least: 6.4
Tested up to: 7.1
Requires PHP: 8.0
Stable tag: 6.11.5
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Product bundles, mix and match and build a box for WooCommerce, plus frequently bought together with sizes and colours, and buy one get one free.

== Description ==

BundleBoss is **one plugin instead of three**: deal packs, configurable kits and build-your-own boxes all live here, so you are not stitching separate bundle, mix-and-match and composite plugins together. And it starts simple: **a first bundle takes about two minutes**, timed from a fresh install to published on a stock store.

Here is what sets it apart: most bundle plugins lock every slot. BundleBoss is built around customer choice from the first click. The free plugin groups products into a "buy these together and save" pack and lets customers pick the size and colour of **every unit**, buying the lot as one cart line. **If you can describe the bundle, you can probably build it here.** That is why shops run it for deal packs, configurable products, build-your-own kits, gift sets, and team kit and workwear.

See BundleBoss build a bundle in two minutes:

https://youtu.be/x4hHrSH0xq4

**Try it live:** [demo.bossmage.com](https://demo.bossmage.com) is a full demo store running Pro, with build-a-box discounts, a PC configurator and more. Click around and build things, nothing breaks.

Prefer reading? The step-by-step guides are at [bossmage.com/docs/bundleboss](https://bossmage.com/docs/bundleboss/).

= What is free and what is Pro =

The free plugin is the complete fixed-bundle product, not a demo and not a trial. You choose what goes in the bundle; your customer configures every unit of it and buys the lot as one cart line.

**Free includes:**

* **Frequently bought together that works with sizes and colours**: extras in their own box under Add to cart; sizes and colours picked in the row, nothing ticked to start, one button adds the lot, with an optional % off together
* **Buy X, get Y on any product**: buy one get one free, buy 2 get 1 free, or the next one at a % off, applied in the cart by itself, with a badge on shop pages and every offer listed in one place
* **Four page layouts**: Slim list (one tidy row per item), Photo row (photos joined by plus signs), List and Grid, chosen per bundle
* **Per-unit configuration**: the customer sets the size, colour and options of every unit, restricted to the variations you allow
* **Three pricing modes** (percentage off, set amount off, fixed price), plus quantity tier discounts
* **Bundle rules**: quantity ranges per item, optional items customers can skip
* **A guided creation wizard**: pick what you are making, add products, preview, and create, no manual field wrangling
* **A guided product page**: per-item cards, colour swatches, the "All the same" shortcut, three ways to show a repeated item
* **Promotions**: sale countdown timer, related-bundles carousel, the progress-to-discount cart nudge
* **Oversell-proof stock** and fulfilment-ready orders with a component pick list
* **Store plumbing**: shipping weight modes, Itemise on the order (each item its own order line, with its SKU), Cart and Checkout blocks, WPML and Polylang, JSON export and import
* **Item links, if you want them**: an optional small arrow beside each item name opens the product's own page in a new tab, so customers can check details without losing their bundle

**Pro adds the Builder and the selling tools:**

* **Choice slots**: customers pick each component from pools you define, with compatibility and quantity rules and conditional items, all enforced on the server
* **Two more layouts**: the full-page Configurator and a step-by-step walkthrough
* **Build-a-box (mix and match)**: a box builder for a custom gift box, a wine box or a hamper the customer fills themselves, from a pool with a target size and per-product limits
* **Self-updating category pools**: point a choice slot or box at a product category instead of a fixed list, and it stays current, a product added to that category later shows up in the slot automatically
* **Size-run quantity grid** for bundle items: a colours-by-sizes matrix for bulk orders
* **Per-item personalisation** with fees, plus logo and file upload with GDPR export and erase
* **Order growers**: the "You may also like" cart row, bought-together picks by category, tag or brand, four more offer types across products with dates and limits, the bigger box upgrade, buy X get Y across a bundle's items, gift mode
* **Shareable build links** (any shop can open one; creating them is Pro), hero slots, deal badges, and the Composite Products importer

> **Ready to grow every order?** [BundleBoss Pro](https://bossmage.com/bundleboss/#pricing) has a 14-day trial, no card needed. Upgrading keeps every bundle you built in the free plugin.

When you find something BundleBoss does not do yet, tell us. We are small, we ship often, and we build what shop owners actually ask for (see "Tell us what you need" below).

= The free plugin, in detail =

* **Frequently bought together**: up to four extras in their own box under Add to cart, or in a bundle's tray; colours and sizes picked in the row, and a product with options links to its page
* **Buy X, get Y**: on any product, buy one get one free, buy 2 get 1 free and so on, free or a % off, once or for every set bought, with a most-per-order; the free units apply by themselves, and Order again works them out afresh
* **Four page layouts**: Slim list, one tidy row per item with its choices right under it; Photo row, same-size photos joined by plus signs for a set with nothing to choose; List; and Grid
* **Per-unit configuration**: every unit of a bundle item can be configured independently
* **Guided configurator**: collapsible cards with sticky headers, one-line summaries and full keyboard support
* **"All the same" toggle**: configure once and every unit follows; switch it off afterwards and the picks stay, ready for individual tweaks
* **Three ways to show a repeated item**: arrange a multi-quantity item's units as stacked cards, compact cards, or a comparison table, chosen per bundle
* **Progress-to-discount nudge**: the cart shows "Add 1 more to unlock 15% off" with a progress bar and a one-click button to add another identical bundle
* **Colour swatches**: give attribute terms a colour and chips become swatch circles
* **Three pricing modes**: a percentage discount, a set amount off, or one fixed bundle price
* **Quantity tier discounts**: "buy 3+, save 20%"
* **Sale countdown timer**: live countdown bar with start/end scheduling
* **Related bundles carousel**: cross-sell between bundle pages
* **Oversell-proof stock**: component stock validated while configuring, at add-to-cart and at checkout, reduced on sale and restored on refund
* **Fulfilment-ready orders**: pick list with component SKUs and quantities on every order
* **Itemise on the order**: each item in a bundle goes on the order as its own line with its own SKU and EAN, for stock and accounting systems that read order lines
* **Shipping weight modes**: automatic (sum of chosen components) or manual
* **Export / import**: move every bundle between sites as one JSON file
* **Multilingual**: WPML and Polylang supported out of the box

= BundleBoss Pro, in detail =

[BundleBoss Pro](https://bossmage.com/bundleboss/#pricing) adds the full Builder, advanced layouts, and the selling tools to grow every order:

* **Choice slots**: customers pick each component from pools you define (PC-builder style), with live pricing on every option
* **Compatibility and quantity rules**: stop impossible combinations, enforced on the server, not just in the browser
* **Per-item personalisation**: optional add-on fields (names, options, notes), each able to carry a fee, captured per unit and shown on the order and the warehouse pick list. Built for team kit, workwear and promo
* **Logo and file upload**: customers attach a logo or artwork to an item; secure upload, a download link on the order, GDPR export and erase included
* **Hero slots**: the customer's chosen product takes over the page's main product image
* **Deal badges**: products on sale and featured products surface in the chooser
* **Step-by-step layout**: walk customers through one item at a time, with progress and free navigation
* **Shareable build links**: customers copy a finished build to a link anyone can open and buy (free shops can open a shared link; creating one is Pro)
* **Migrate from Composite Products**: one click converts existing composites to draft bundles
* **Configurator layout**: a full-page, two-pane builder with a docked "Your build" summary and a price on every option, for big or many-part products like a gaming PC
* **Build-a-box (mix and match)**: customers fill a box by choosing any number from a pool, with a target size, per-product limits, and a live count and total (any 6 chocolates, any 4 candles)
* **Self-updating category pools**: build a choice slot or box pool from a product category, by hand, or both. A category pool maintains itself, add a product to the category and it appears in the slot with no edit to the bundle, and cross off the odd products you want left out, ideal for a rotating range or a large catalogue
* **Gift mode**: a recipient, a gift message, optional gift wrap with a fee, and a no-prices gift receipt, all carried through to the order
* **You may also like**: a row in the cart and side cart, picked from what is in the cart (bought-together picks, then your WooCommerce cross-sells), with sizes chosen in the row and one compact row on a phone
* **Bought-together rules**: picks by category, tag or brand for products with none of their own
* **More offers**: another product free, 3 for 2 across a category, buy A and B get C, and choose a gift; shop-wide by category, tag or brand, with dates, limits per customer, returns rules and coupon rules
* **Bigger box**: when a box with pack sizes is full, the next size is offered at its per-item price, keeping every pick
* **Buy X get Y across a bundle**: buy-two-get-one-free style offers counted across the bundle's own items (the cheapest goes free), shown clearly as was, pay, and you save. Buy X get Y on a single product is in the free plugin
* **Conditional items**: show or hide a bundle item based on what the customer has already chosen, enforced on the server (pick the tagged top and the matching-joggers slot appears)

The free plugin is complete on its own; Pro adds everything described here. Everything under "The free plugin, in detail" stays free.

= Tell us what you need =

BundleBoss is built and updated by the people who answer its support, and the roadmap is written by real shop owners. If you need a bundle it does not handle yet, or an option you wish existed, ask for it on the [support forum](https://wordpress.org/support/plugin/bundle-boss/). Every request gets read and answered, and "can it do X?" is exactly how new features get chosen. You name it, and there is a real chance we build it.

= Requirements =

* WordPress 6.4+
* WooCommerce 8.0+
* PHP 8.0+

== Installation ==

1. In your WordPress admin go to **Plugins > Add New**, search for **BundleBoss**, then install and activate it. WooCommerce needs to be installed and active.
2. Go to **BossMage > Create a bundle**. The guided wizard takes you from picking products to a finished bundle page in a few minutes, with a live preview of what your customers will see.
3. Prefer the full editor? Create a product and choose the **Bundle** product type: the products go on the **Bundle Items** tab, the deal (a percentage off, an amount off, or one fixed price) on **Bundle Pricing**, and extras like gift options or Buy X Get Y on **Bundle Promotions**.
4. Publish and open the product page. The bundle is ready to sell, with live totals, per item options and stock checks built in.

Want to try it before installing? Use the **Live Preview** button on this page, or browse the demo shop at https://demo.bossmage.com.

== Frequently Asked Questions ==

= How do I create product bundles in WooCommerce? =

Install BundleBoss, then go to BossMage → Create a bundle. The guided wizard takes you from picking products to a published product bundle in about two minutes, with no code. Prefer the full editor? Create a product, choose the Bundle type, and set your items, pricing and promotions on their own tabs.

= Can customers mix and match, or build their own box? =

Yes. A build a box (mix and match) product lets customers fill a box from a pool you choose, with a target size, per-product limits, and a live count and total (any 6 chocolates, any 4 candles). That's a Pro feature. On any bundle, customers also pick the size and colour of every item and buy the lot as one order.

= Does it work with variable products? =

Yes, that's the core use case. Customers pick a variation for every unit, restricted to the options you allow per bundle item.

= Where did product options on single products go? =

In 5.0.0 they became [AddOnBoss](https://wordpress.org/plugins/addon-boss/), a companion plugin from the same family: option sets, personalisation fields and print positions on a product's own page. Install it and everything you built is where you left it, nothing needs rebuilding. BundleBoss stayed the bundle builder, and the two share one option-set library when both are active.

= Can a bundle include virtual or downloadable products? =

Yes. Virtual items (services, licence keys you fulfil yourself) just work. Downloadable items deliver their files like any normal purchase: permissions are granted when the order is paid, the customer gets the links in the order email and under My Account → Downloads, and a refund cuts access automatically.

= Does selling a bundle reduce the stock of the products inside it? =

Yes. Component (and variation) stock is reduced when the bundle sells and restored if the order is cancelled or refunded. Stock is also validated during configuration, at add-to-cart, and again at checkout.

= Will the price and VAT come out right? =

Yes. Every price on the bundle page follows your store's setting for showing prices with or without tax, and the total a customer sees on the page is the total they pay in the basket, in every tax set-up we test, including shops that use the Tax Switch plugin to let customers flip between the two. A bundle is taxed at one rate, the tax class you give it, like any WooCommerce product. If your bundles mix rates, such as a hamper of zero-rated food with a standard-rated mug, ask your accountant how to rate the hamper before you set its tax class.

= What does the order show, and can my stock or accounting system read it? =

Each bundle is one line on the order, with every item the customer picked listed under it: colour, size and quantity, plus a pick list with each item's SKU for whoever packs it. Stock comes off the real products. If your till, warehouse, ERP or accounting system needs every item as its own line, switch on **Itemise on the order** on the bundle's Pricing tab: each item is recorded as its own order line for its own product, so your system can match it by SKU or EAN, while the customer still buys and pays for the bundle as one.

= Do coupons work on bundles? =

Yes, as on any product. If a bundle's price is already a discount and you don't want codes stacking on top, switch on **Exclude from coupons** on that bundle. Percentage and fixed product coupons then skip it, and a fixed basket discount comes off the other items instead. You set it once on the bundle, not on every coupon you make.

= Can I give a bigger discount for buying more? =

Yes, in the free plugin. Bulk discounts reward buying several bundles at once, for example 10% off from 2 and 20% off from 3, and the basket shows the customer how many more they need for the next step.

= Is the free version limited? =

No limits on how many bundles you make, how many items go in them, or how long you use it. Variable products and choosing the size and colour of every item are free, as are the three pricing modes, bulk discounts, stock control and the order pick list. Pro adds the builder tools listed above, such as build-a-box and choice slots.

= Will it work with my theme and on phones? =

BundleBoss is tested across 18 popular themes, including Astra, Kadence, GeneratePress, OceanWP, Blocksy, Neve, Storefront and the default WordPress block themes, with fixes for Divi and Enfold, and on screens down to 320 pixels wide. If something looks wrong on yours, post in the support forum with the theme's name and we'll look.

= Will an update break my shop? =

Every release runs more than 1,400 automated tests before it goes out, many of them checking what each page charges, and bigger releases also run over 300 browser checks of real shopping journeys. When an update changes how an existing bundle looks or works, the changelog says so in plain words.

= Does it work with currency switchers? =

Yes. The bundle is charged once, in the customer's currency, and every figure on the page converts with it: the total, the saving, size prices and extra fees. Tested with FOX Currency Switcher.

= Where do I get help? =

Post in the support forum here on WordPress.org. Every thread gets an answer, and your question and its answer stay there to help the next shop with the same problem. If you'd rather not post publicly, for example because it involves your store's details, you can email us through bossmage.com.

= Can I set one fixed price for the bundle? =

Yes. Each bundle can use a percentage discount off the sum of the chosen items, a set amount off, or a fixed price that never changes regardless of the customer's choices.

= Can I make the configurator match my store's branding? =

Yes. The configurator inherits your theme's fonts automatically, and every colour it uses is exposed as a CSS variable. Set a handful of values in Appearance → Customize → Additional CSS and the whole interface follows your brand:

`:root {
  --bb-accent: #c2410c;   /* step highlights */
  --bb-ink: #1e2a4a;      /* headlines and the total bar */
  --bb-surface: #fffdf8;  /* cards */
  --bb-border: #e8e0d0;
}`

The full token list is documented at the top of the plugin's bundle.css.

= Can I show my own information next to the configurator (total weight, nutrition, performance)? =

Yes. The configurator fires a JavaScript event, `bundle_boss:build_changed`, after every change the customer makes. The event detail carries the whole build: which products and variations are picked, quantities, and the running totals. Listen for it, derive whatever your store cares about, and render the result into the container printed by the `bundle_boss_after_summary` action:

`document.addEventListener( 'bundle_boss:build_changed', function ( e ) {
  if ( ! e.detail.complete ) { return; }
  // e.detail.items gives [ { productId, qty, units: [ { variationId, attributes } ] } ]
  myPanel.textContent = 'Total weight: ' + myWeightFor( e.detail.items ) + ' kg';
} );`

A PC store renders performance estimates, a hamper store calories, a ski shop carry weight. The event works on every bundle, free and Pro alike.

= Does it work with the block (Gutenberg) cart and checkout? =

Yes, both. The classic shortcode pages and the block-based Cart & Checkout are fully supported: bundle pricing, the selections summary, stock protection and order details all work identically, and the progress-to-discount nudge appears in the block cart too. Block themes (Full Site Editing) are also tested.

= Is my data removed when I uninstall? =

By default, no: bundle products and their configuration are deliberately kept, so reinstalling restores everything. If you want uninstalling to remove all bundles and settings, switch on "Delete all BundleBoss data when the plugin is uninstalled" under BossMage → BundleBoss (download an export first, on the same page).

= Can I back up my bundles or move them to another site? =

Yes. BossMage → BundleBoss exports every bundle (items, choice pools, rules, pricing and promotions) as one JSON file. Importing matches products by SKU, then slug, so the file survives the move to a site where product IDs differ; anything that can't be matched is reported, never guessed.

= Does it work on multilingual sites (WPML / Polylang)? =

Yes. Bundle settings copy to translations, slot labels are translatable per language, and product/term references are mapped to the language being browsed.

== Screenshots ==

1. The everyday bundle: per-unit configuration with colour swatches, the offer pill and a live total, bought as one product.
2. Choice pools with photos and prices (Pro): the customer picks each item from the pool, with the count and progress live.
3. Build-a-box with quantity breaks (Pro): the tier ladder is advertised up front and the box nudges toward the next discount as it fills.
4. Configurator layout (Pro): colour and size picked, personalisation open with priced fields, and a "Your build" summary itemising everything, saving included.
5. Size-run quantity grid (Pro): colours by sizes with per-size surcharges, volume pricing on the whole order.
6. Step-by-step layout (Pro): one decision at a time with progress chips, the count and the total always in view.
7. Gift mode (Pro): gift wrap with its fee and a handwritten-card message, both carried through to the total.
8. Pack sizes (Pro): choose a bag, then fill it. Three sizes at three prices, one price for the bag whatever goes in.
9. Buy X get Y (Pro): the offer advertised up front, both items configured, and the discounted total live.
10. Fulfilment-ready cart: each bundle is one line with its component pick list and its own "You save" figure.

== Privacy ==

BundleBoss does not collect, store or transmit any personal data of its own.

* Customers' bundle selections (which products, quantities and options they picked) are stored only as part of their cart and order: standard WooCommerce order data under your control, removed whenever you erase the order.
* Shareable build links encode product choices in the URL itself; nothing is stored server-side and the links contain no personal information.
* The plugin sets no advertising or tracking cookies.

= Third-party services =

The free version includes the Freemius SDK, which handles BundleBoss Pro's trial, checkout, licensing and updates. On first use it asks once whether you want to opt in to security and feature update emails, occasional offers, and sharing basic details with Freemius: your name and email address, the site's address, title and language, the WordPress and PHP versions, and the list of plugins and themes.

Nothing is sent unless you choose to: by opting in, by starting a Pro trial or buying Pro, or by filling in the optional feedback form when you deactivate the plugin. If you skip the opt-in, the plugin works fully and the SDK sends nothing off your site. Freemius terms: https://freemius.com/terms/ and privacy policy: https://freemius.com/privacy/

== Changelog ==
= 6.11.5 - 2026-11-13 =
* Fixed: on a shop with a full-page cache and a currency switcher (WOOCS/FOX, CURCY, YayCurrency, WooCommerce Multilingual & Multicurrency, Price Based on Country), a bundle's page and a Frequently bought together box show each shopper their own currency. The cache kept the page in the currency of whoever opened it first, so the next shopper saw that currency's total and prices while the basket charged their own. Each is now drawn again in the shopper's currency as the page loads, unless they have already started choosing. Where the switcher shows more than one currency (or Price Based on Country has a pricing zone), a page with a step-by-step, configurator, build-a-box or quantity grid bundle (Pro), with more than three bundles, or with Frequently bought together on a product with options is no longer kept by the cache. A switcher left with one currency changes nothing.
* Fixed: on a page-cached shop, where two offers cover a product, its page and its shop card name the offer an empty basket gets, and each shopper sees the one their own basket gets once the page has loaded. The cache kept the first shopper's choice for everyone. In Pro, a "Better deal only" offer no longer shows everyone its full price because one shopper's coupon code beat it. With a currency switcher, the offer box and the card's price follow each shopper's currency too.
* Fixed: bundles in a theme's side cart keep their layout on page-cached shops. Their styles loaded only once a bundle was in the basket, so a cached page could be missing them; they now also load on every page that shows a mini cart, whatever the basket holds.
* Fixed: Frequently bought together's own form (on a quantity grid page), a free gift's options chosen in the cart (Pro) and the cart's "Add to your order" row (Pro) no longer fail on a page left open, or kept by a cache, longer than its security token lasts (about a day). Each fetches a fresh one and goes through; the form used to add nothing and say nothing. A photo upload (Pro) and the tray's refresh do the same.
* New: for developers, `bundle_boss_currency_plugin_running`, `bundle_boss_page_shows_mini_cart` and `bundle_boss_refreshable_nonces`.

= 6.11.4 - 2026-11-12 =
* Fixed: on a shop with a full-page cache (W3 Total Cache and others like it), a bundle's page no longer shows one shopper's basket to everyone. The page carried the shopper's "Your bundles" list, so the cache could keep one shopper's copy and show it to every visitor. The page is now the same for everyone, and each shopper's own list and count arrive once the page has loaded.
* Fixed: page caches no longer keep a bundle opened from the basket to edit, a product page showing "added to your cart", or a Frequently bought together box that marks a product "In your cart".
* Fixed: in themes that lay the product summary out as a flexible column, the "Bundle" label no longer stretches across the page, and no empty band opens under Add to cart.
* Fixed: Hide main photo also hides a gallery printed as WooCommerce's plain image box (some themes and gallery plugins print it that way) and Gallery Slider for WooCommerce's gallery. Where a gallery is not hidden, the product details no longer drop below it.
* Fixed: in Slim list, an item's note sits on its own line under the name and SKU, above its choices, and no longer opens a gap under the SKU.
* Fixed: a bundle with nothing in it no longer reports a price its product kept from before it became a bundle (to structured data, the Store API and pay-later widgets such as Afterpay), while its page says "Configure to see price". Such stored prices are cleared once on update. Added by a link, it now says it has no products yet.

= 6.11.3 - 2026-11-12 =
* New (Pro): on a Pro trial, the BundleBoss page header counts down the days left ("Pro trial · 9 days left"), and one card on the Tools tab shows the two steps to a first Pro bundle.
* New (Pro): three days before a Pro trial ends, the card says when it ends and which bundles will pause. Once it has ended, it says what is paused and how to bring it back. Each card can be closed, See plans opens BundleBoss's plans on bossmage.com, and the trial's words are in every language BundleBoss is translated into.
* Fixed: the Upgrade page inside WordPress shows BundleBoss Pro's own plans. It showed only the BossMage All-Access plans. All-Access is still sold on bossmage.com, and an All-Access licence activates BundleBoss Pro as before.
* Fixed: on a shop with a page cache (LiteSpeed Cache, WP Rocket and the like) and Price Based on Country's "Load products price in the background", a bundle's price follows the shopper's currency like every other product. The other cards turned to lira while the bundle stayed at "From €91,00". The bundle's page is drawn again in the shopper's currency too, unless the shopper has already started choosing.
* Fixed: on a page-cached shop, a bundle's price on shop cards and product lists also follows the currency refresh of CURCY ("Use cache plugin") and WOOCS/FOX ("I am using cache plugin on my site").
* Fixed: the price in Add to cart no longer drops to a line of its own starting with "·" in themes that make every part of a button a block (Qode themes do). Where the words and the price do not fit on one line, the price is left out. The Bought together button does the same.
* Fixed: the tabs at the top of the BundleBoss page no longer show a small scrollbar on Windows, or two stray lines beside a clicked tab. The keyboard focus ring still shows.
* New: for developers, `bundle_boss_page_cache_price_classes` lists the currency plugin classes whose page-cache price wrapper a bundle's price goes through.

= 6.11.2 - 2026-11-10 =
* Fixed: with WooCommerce Multilingual & Multicurrency, a bundle is priced and charged in the shopper's currency. A shop selling in euros charged a shopper paying in lira 91 lira for a 91 euro bundle, took 10 lira off where it should take 10 euros, and showed "From ₺91,00" on every bundle card. The shop card, product page, mini cart, basket, checkout and order now all show the same converted figure.
* Fixed: with WOOCS/FOX, CURCY, YayCurrency or WooCommerce Multilingual & Multicurrency, a bundle's From price worked out while a shopper browses in another currency (for example when an order changes an item's stock) stays in your shop's currency. It was saved as the shopper's figure (5,391.07 "euros" for a 91 euro bundle), and every shop card then showed that figure converted again.
* Fixed: in a currency without decimals, such as yen, under WOOCS/FOX, CURCY or YayCurrency, a bundle is charged what its page says. A 94.50 euro bundle was rounded to 95 euros before it was converted, and charged 16,770 yen under a page saying 16,682.
* Fixed: with WOOCS/FOX set to take payment in your shop's currency, the bundle page shows its total and savings in the shopper's currency. It showed "Total ₺91,00" under a title of ₺5.390,87.
* New: for developers, `bundle_boss_currency_plugin_classes` lists the classes whose price conversion BundleBoss switches off while it works out your shop's own figures, and `bundle_boss_display_only_rate` gives the rate for a currency plugin that converts prices only as it prints them.

= 6.11.1 - 2026-11-10 =
* New: Tools > Appearance > "Colours from your swatch plugin". Turn it on and a bundle draws the colours and pictures you set in Qode Variation Swatches or VillaTheme Variation Swatches as dots, as your product pages do, with each shade's name on hover and for screen readers. Off by default, so no bundle changes until you turn it on. Your own BundleBoss colours, and those from Variation Swatches for WooCommerce, still come first, an item set to Dropdown stays a dropdown, and nothing is guessed from a name.
* Fixed: with Price Based on Country, a bundle is priced and charged in the shopper's currency. A shop selling in euros charged a shopper in its Turkish lira zone 91 lira for a 91 euro bundle: the shop card read "From ₺91", the basket and the checkout charged ₺91 and "You save" took 91 off the items' lira prices. The bundle's own money (a fixed price, an amount off, a pack price, a fee) is now converted at the zone's exchange rate, the items are charged at the zone's own prices as the product page adds them up, and the card, mini cart, basket, checkout, order and the Store API all read the same figure. A shop in one currency sees nothing change.
* Fixed: Add to cart no longer waits for the page's background security refresh. On a slow host, pressing Add soon after the page opened took two server round trips; it now takes one. A page served from an old cache still adds, with one quiet retry.
* New: for developers, `bundle_boss_amount_in_current_currency` converts BundleBoss's own amounts for a currency plugin not covered (filter: converted amount, base amount, context, product), and `bundle_boss_cart_line_in_current_currency` tells BundleBoss that the running plugin leaves a price set on a cart line alone, so the bundle line is set in the shopper's currency.

= 6.11.0 - 2026-11-09 =
* New (Pro): a file field is a drop zone: its button, "or drag it here" and the files it takes, a progress bar, then the file as a chip with its picture, name, size and Ready. A dropped file uploads as if chosen, a second pick during an upload wins, and the keyboard focus stays in the field. It names the file types the shop's server takes. A file field in a units table cell stays a compact button.
* New (Pro): a file field can take photos only (Accepts: Photos only). Its button says "Choose a photo", PDFs are refused, and an empty one says "Add your photo to continue".
* New (Pro): the editor says "Free: shoppers pay nothing for this box." beside a box size with items and no price, so a size left blank is never a surprise.
* Fixed: a bundle whose price cannot change (every item fixed, nothing to pick, no charged extra) shows its plain price on its shop card and page, "£22.99", not "From £22.99". A free question such as one photo for the whole set keeps it plain; any size, quantity range, optional item, paid extra, priced question asked once for the whole order (a print, "Front" or "Back +£3"), gift wrap fee or buy-more price keeps "From".
* Fixed: a press of Add with choices still to make now marks an empty required field (a photo) on the same press as the sizes and colours, and in Slim list and Photo row the line under Add names everything left, in page order: "Still to choose: Size, frame, photo". It keeps itself current and goes once nothing is left. The sticky bar says it too, from the same press: a fresh page is not told off before it starts.
* Fixed: the price under a bundle's title follows the build. Once every choice that prices it is made it shows what the bundle costs, the same as the total, and goes back to "From" when a choice is cleared. Only the bundle's own price follows, never the same bundle in a products widget.
* Fixed: in Slim list, a product with a ninth or later choice (size, colour, material...) gives each its own row; the ninth used to sit on top of the eighth. Up to twenty now.
* Fixed: the From price takes a product's own quantity price, as the basket does (two caps at £8 each for 2 or more read From as if they cost £10).
* Fixed: "Bought separately" and "You save" on the page now match the basket and the order: a box sold by the pack counts its items at their own prices, and a slot's own % off counts as a saving. A bundle that costs nothing shows no saving, as the basket never did.
* Fixed: the Frequently bought together button keeps its total on a product whose AddOnBoss options are all free (AddOnBoss prints no total there from its next release).
* Fixed: the wizard's two descriptions are WordPress's own text box, so formatting shows as formatting instead of HTML tags, and a short description keeps its bold, lists and links. Saved as plain text before, any change in the wizard deleted them.
* Fixed: the wizard's "copy a bundle" search finds the bundles vendor staff may edit through a per-bundle permission (Dokan, WCFM, co-author plugins). With none of their own the list was empty and the copy row hidden.
* Fixed: on a product sold through AddOnBoss's quantity grid with an offer on it, the grid's "3 items added to your cart" now stays after an add. It went about half a second later whenever the page total was still asking about the order (a name typed just before Add), because that late answer, about an order the grid no longer held, drew the grid again.
* Fixed: a signed-in shopper who had emptied the cart could lose part of an add. The page total asks about the order while the add is still putting its lines in (a quantity grid, a bundle with extras bought together); its question read the first lines from the saved cart and, ending after the add, saved them over the rest. The question now writes nothing.
* Fixed (Pro): with Buy X Get Y on, a box sold by the pack no longer counts its items toward the offer. The basket charged less than the page said (a £20 box of 12 beside two £10 items: £26 in the basket, £30 on the page); now both say £30.
* Fixed (Pro): the From price of a Buy X Get Y bundle with a box sold by the pack frees an item, never the pack, so it matches what the cheapest build costs.
* Fixed (Pro): a box size priced at 0.00 is a free box. Its items no longer show prices nobody pays, and Add to cart now works once the box is filled (it stayed greyed out with no reason).
* Fixed (Pro): a bundle's % or amount off never reaches a box sold by the pack, as the basket has always charged it, and now the page and the From price agree (at 10% off, a £20 box beside £20 of items showed £36 and charged £38; both now say £38).
* Fixed (Pro): Buy X Get Y with an amount off shows the saving the basket gives (£5 off and one of two £10 items free: the page said £25, the basket charged £27.50).
* Fixed (Pro): Buy X Get Y with a buy-more quantity tier shows what the basket charges for two or more bundles (the page used the bundle's own % for the free item instead of the tier's).
* Fixed (Pro): Buy X Get Y frees an item at what it costs in the bundle, after a box's quantity break or a slot's own % off. Four £2 socks at 25% off cost £1.50 each, so two of them free left £2.00 to pay; it is now £3.00, on the page and in the basket.
* Fixed (Pro): the From price of a pick-your-own box takes off the quantity break its smallest fill reaches (a box of 4 at 25% off showed From £8.00 and cost £6.00).
* Fixed (Pro): a block of whole-bundle questions with a required one is no longer a fold that can be closed.
* Fixed (Pro): a privacy erase now deletes a bundle's whole-bundle files (a team logo, one photo for the whole set) and their answers, without AddOnBoss installed, takes the readable line off an older order too, and keeps a file another order still uses (a reorder) until the last of them is erased.

= 6.10.0 - 2026-11-07 =
* New: after Publish, the wizard says the bundle is live, with a link to it in your shop and where shoppers will find it (shop, search, categories), instead of dropping you into the full editor.
* New: the wizard shows the price as you build: items bought one by one, the bundle price, what shoppers save, and each bulk discount. The preview shows the same price and the Add to cart button the shop will show.
* New: start a bundle by copying one you already have. Same items and price, saved as a draft for you to change.
* New: layouts in the wizard are picture cards, the same as the editor, with Slim list marked Recommended. Settings most bundles leave alone sit under "More display options".
* New: a copied bundle (or any draft) opened in the wizard can be published from there, with the same price check as a new bundle. Copying follows WooCommerce's own rule for who may duplicate products.
* New: on a wide screen the wizard's Review step shows the preview beside the settings, kept in view as you scroll, so each change shows where you are looking. Editing a bundle opens the preview on the bundle itself rather than the top of the page. Narrower screens keep the preview under the settings.
* Changed: a new bundle starts on **Slim list**, the layout the editor recommends, in the bundle editor and in the wizard (Discounted set, Fixed-price kit, and in Pro Buy X, get Y, Configurable kit and Gift set; Build a box still starts on Grid). Existing bundles keep their layout.
* Changed: the bundle's name follows the products you pick until you type your own, and names with "&" read correctly. Out of stock products are marked in the search and on Review.
* Changed: the wizard's price summary quotes what the cart charges, with Buy X, get Y, fees and a running sale included, and says "From" exactly where the shop does. A choice reads the way it is set up ("Customers choose 1 to 3", "Customers fill a box of 6 / 12").
* Changed: "Or copy a bundle you have" is a search. It used to list only the 50 bundles edited last, so in a bigger shop the older ones could not be copied; now any bundle can be found by name or ID, and opened empty it lists the ones edited last. Drafts say so, and someone who may edit only their own products is shown theirs.
* Changed: in the bundle editor, bulk discounts step aside while the price is an amount off, since the cart applies none there.
* Fixed: the bundle wizard no longer publishes a bundle that sells for nothing. A "One fixed price" left empty went live at 0.00, and an amount off as big as the items took the price to nothing; Publish now says why, beside the price box, and keeps the bundle off the shop. Save as draft still works, and a draft saved without its price stays not for sale.
* Fixed: in the bundle wizard, the first click on Publish just after typing a price was lost (the preview rebuilt and moved the button). One click now publishes.
* Fixed: bulk discounts no longer show on a bundle priced by "An amount off". The cart never applied them there, so the product page promised a saving the shopper did not get. In the wizard, a bulk discount now reads "Buy 2 or more bundles, 15% off each", starts above the bundle's own discount, and says when it would not be a saving.
* Fixed: editing a bundle in the wizard checks the price the cart will really charge, kits and boxes included, and keeps a bundle you made free on purpose free. A bulk discount of 100% or more is refused.
* Fixed: the wizard's Review step fits a phone, and a box sold by the container no longer asks for sizes when it is sold by count. Editing a "pick N" choice keeps its label.
* Fixed: a bundle made or edited in the wizard now keeps its "From" price in step when a product in it changes price, the same as one saved in the editor.
* Fixed: the wizard's product, category and copy searches said "No results found" and "Please enter 1 or more characters" in English whatever the admin's language. They now use WooCommerce's own words, translated as in its own searches.
* Fixed: in the Slim list layout, a product's first choice (such as Volume) could sit above its name on shops that minify their CSS with LiteSpeed Cache, whose minifier broke one of the layout's rules. The rule is written so any minifier keeps it.
* Fixed: in the Slim list layout, a product with five or more choices (size, colour, material and so on) shows each on its own row. On a wide screen the fifth used to sit above the product's name.
* Fixed: bundles made in the wizard on earlier versions are filed for price updates the first time an admin page opens after updating.

= 6.9.0 - 2026-11-06 =
* New: two bundle layouts, in the free version and Pro. **Slim list** shows each item as one tidy row: its photo, its name with a short line from its description, and its price on the same line, with any size, colour or choice right under it. **Photo row** shows a set with nothing to choose as same-size photos joined by plus signs. Pick them in a bundle's Display tab; existing bundles keep their layout. See [Layouts](https://bossmage.com/docs/bundleboss/layouts/).
* New: in Slim list and Photo row, Add to cart says **Select options** until everything is chosen, in its own colours, then its usual words and the bundle's price. Pressed early, it says right under the button what is still to choose and marks each row it means.
* New: in Slim list, an unfinished bundle's total reads "From" the cheapest finished bundle, a choice still to make is marked by its row, and long option names sit under their label on a phone. A picked colour is named beside its swatches; a picked choice slot becomes that product's own row; a quantity range is priced each, with its limits beside the stepper; an optional item has a tick box beside the price it adds, and a tap on its name or photo ticks it, with an optional pick's choices folded away until it is ticked; bundle tiers sit beside How many? and light up as the quantity reaches them. Pro personalisation, the sale countdown with its bar and the gift option sit as lines of the list. Picking a size or colour on a phone leaves the page where it is.
* New: **Line under the button**, in a bundle's Display tab: a short line of your own under Add to cart, such as "Gift wrapped in one box". Empty shows nothing.
* New: in Slim list, a size or colour that is sold out given the other picks is struck through before it is pressed, instead of "This combination is currently unavailable" after.
* Fixed: a bundle whose required item is out of stock now says so before a press ("Sorry, \"…\" is out of stock.") with Add held back, instead of letting Add be pressed for the basket to refuse it. An optional extra out of stock still holds nothing back.
* Fixed: the add bar at the bottom of a phone screen showed a plain grey button on themes that leave buttons unstyled, such as Twenty Twenty-Five. It now matches the main Add to cart button.
* Fixed (Pro): Start another bundle on a Step by step bundle now starts again from the first step.
* Fixed: a row of sizes or colours laid out before the theme's font had loaded could stay wrapped onto two lines, then jump onto one when something was picked, moving the page under the shopper. Rows now settle once the fonts are in, in every layout.
* Fixed: on Astra, the theme's floating back-to-top button sat on the Add button of the add bar at the bottom of a phone screen. While the bar shows, the back-to-top buttons of Astra, OceanWP, Kadence, Blocksy, GeneratePress and Divi now sit above it.
* Fixed: on Blocksy, a bundle set to show its items below the product, across the full page, ran from one edge of the screen to the other. It now keeps the theme's margins.
* Fixed (Pro): on themes that colour prices themselves, such as OceanWP, the price inside a chosen box size took the theme's colour on the filled tile and was hard to read. It is now white like the rest of the tile.
* Fixed: on a shop whose BundleBoss Pro licence has lapsed, a bundle with a Pro item (a choice slot, Pick many or Build a box) showed a chooser stuck on "Loading options…" that could never be added. A required Pro item now makes the bundle unavailable, as a removed product does; an optional one leaves the page and the rest still sells. The Products list and the bundle editor say which item needs Pro.
* Fixed: on such a shop, pressing Update on the bundle deleted its Pro items. They are now kept exactly as they were, and sell again the moment Pro is active.
* Fixed: the Pro note in the bundle editor and the Upgrade card on the BundleBoss page listed "Buy X, get Y" as Pro, though the free plugin already gives buy X, get Y on any product. They now name what Pro adds: offers across products, such as 3 for 2 on a category.
* Fixed: saving a bundle with a Pro item on a shop without Pro wrote a PHP warning ("Undefined array key") to the log.
* Changed: the readme now says plainly that the free version includes the Freemius SDK, what its opt-in asks, and that it sends nothing unless you choose to. Its free feature lists now include the four page layouts and Itemise on the order.

= 6.8.5 - 2026-11-04 =
* Changed: **Itemise on the order** is now in the free version. Switch it on in a bundle's Pricing tab and each item in the bundle goes on the order as its own line for its own product, so a stock, warehouse or accounting system can match it by SKU or EAN. The order total stays exactly the same.
* Fixed (Pro): free gifts by spend no longer read the cart too early when WooCommerce empties it at login, logout or from a scheduled task. It logged "Get cart should not be called before the wp_loaded action" in the PHP log.

= 6.8.4 - 2026-11-01 =
* Fixed: the bundle builder fills the column a page builder gives it. An Elementor container with Align items set to Start sizes the widget to its content, which left the builder 0 px wide and every card a sliver. Nothing on the page has to change. In Pro, the free gifts by spend panel is held the same way.

= 6.8.3 - 2026-10-31 =
* New: German, including the words shoppers see in Pro. It says "du", as WooCommerce's own German does.
* New: English (Australia). It says "cart", as WooCommerce's own Australian English does.
* New: English (Canada). It says "cart" and spells personalize with a z, as WooCommerce's own Canadian English does.
* New: Polish, including the words shoppers see in Pro.
* New: Portuguese (Portugal), beside the Brazilian file, including the words shoppers see in Pro. It keeps WooCommerce's own Portuguese (Portugal) spelling.
* New: Swedish, including the words shoppers see in Pro.
* New: Danish, including the words shoppers see in Pro.
* New: Finnish, including the words shoppers see in Pro.
* Fixed (Pro): in a theme's side cart that sizes its item list to the room left in the drawer (Shoptimizer's cart drawer), the free gifts by spend picker and the "You may also like" row no longer squeeze the cart items into a thin strip. The items keep their full size and the drawer scrolls as one, the gifts after the subtotal.
* Fixed: in German, an option's name keeps its capital inside a sentence ("Farbe wählen", not "farbe wählen") in the Frequently bought together box and its choose window, and in Pro in the side cart's "You may also like" row, the free gift window and the offer editor.
* Fixed: the bundle editor's tab summaries count in the language's own plural forms, so Polish says "5 produktów", not "5 produkty".
* Fixed: "Active", "Set", "Size", "for %s" and "%s more" now tell translators where each one appears, so a language can use a different word in each place.
* Fixed: the import note on the Tools page now says plainly that each imported bundle keeps the status it was exported with (published, draft or private).

For the full history of earlier releases, see changelog.txt in the plugin folder, or
https://plugins.svn.wordpress.org/bundle-boss/trunk/changelog.txt

== Upgrade Notice ==

= 6.11.5 =
On page-cached shops, bundle pages show each shopper their own currency and offers, side cart styles always load, and forms left open past a day still add.

= 6.11.4 =
A bundle's page no longer shows one shopper's basket to everyone on page-cached shops, and fixes for flexible-column themes, Hide main photo, Slim list notes and empty bundles.

= 6.11.3 =
Pro trial reminders on the BundleBoss page, the Upgrade page shows BundleBoss Pro's own plans, and a bundle's price follows the shopper's currency on page-cached shops.

= 6.11.2 =
Bundles are priced and charged in the shopper's currency under WooCommerce Multilingual & Multicurrency, yen and other currencies without decimals are charged what the page says, and every currency switcher keeps the From price in your shop's currency.

= 6.11.1 =
A bundle is priced and charged in the shopper's currency under Price Based on Country, Add to cart leaves at once on a slow host, and a new switch draws a bundle's colours from Qode or VillaTheme swatch plugins.

= 6.11.0 =
The page, the From price and You save now match the basket for boxes sold by the pack, Buy X get Y and quantity prices; a set whose price cannot change shows its plain price; one line names every choice still to make; and in Pro a photo field is a drop zone.

= 6.10.0 =
The bundle wizard checks the price before it publishes, says when a bundle is live, shows the price and a preview beside the settings as you build, and can copy any bundle you have; Slim list keeps every choice under its product name, on any shop.

= 6.9.0 =
Two new bundle layouts, Slim list and Photo row, in the free version and Pro, fixes for sold-out items, theme buttons and bundles with Pro items on a shop without Pro, and clearer notes on what is free and what is Pro.

= 6.8.5 =
Itemise on the order is now free: each item in a bundle can go on the order as its own line, so a stock or accounting system can match it by SKU or EAN.

= 6.8.4 =
Fixes the bundle builder showing as a thin strip in a page builder column that sizes itself to its content, such as an Elementor container set to Align items: Start.

= 6.8.3 =
Adds German, Polish, Portuguese (Portugal), Swedish, Danish, Finnish and English (Australia, Canada), and keeps the products readable in a theme's side cart beside free gifts.

= 6.8.2 =
Uploaded artwork is kept with AddOnBoss installed, and a free gift offer's returns rule switched off stays off the order page and emails too.

= 6.8.1 =
Free gifts by spend are calmer to choose (Pro), savings say "by buying together", a bundle's Total counts the extras you tick, and a bundle with nothing to choose adds from shop pages.

= 6.8.0 =
Bundle pages can add to the cart like any product: choose it in Tools > Appearance. Free gifts by spend sit at the top of the cart (Pro), and chat buttons no longer cover BundleBoss windows.

= 6.7.1 =
Fixes "A network error occurred" on an add when another plugin prints into it, bundle prices in the mini cart, "(Edit)" in the Cart block, From prices with required paid fields, and Total savings.
