Get in touch
  • OpenCart
  • Sales and conversion
  • v1.0.3

Product Bundles and a Free Gift by Order Total for OpenCart 2.3, 3 and 4

A “bought together” block on the product page, the bundle discount as its own line in the totals and an automatic gift by order total.

Download Free
Pro · lifetime licence The more sites, the less each one costs
Compatibility
OpenCart 2.3.0.x, 3.0.2 – 3.0.5.0 and 4.0.2 – 4.1.x
Version
v1.0.3 (OpenCart 4)
v1.0.4 (OpenCart 3.x)
v1.0.3 (OpenCart 2.3)
Licence
two sites, lifetime
Trial
7 days, no card, one per site
Updated
26 October 2026
Or all 173 Pro modules with All Access — 4 990 ₴ / year

What Free has,
and what Pro adds

The free version works with no time limit. Pro adds the rest of the features in the table.

Feature Free Pro
"Frequently bought together" block on the product page, add a set with one click ✔ ✔
A bundle triggers based on cart contents, not a button ✔ ✔
Discount as a separate named line in the order totals ✔ ✔
A unit of stock can't be discounted twice ✔ ✔
The discount is capped at the value of the items it covers ✔ ✔
Gift by order total with a hint "add another N UAH" ✔ ✔
The gift is an ordinary catalogue item, stock stays correct ✔ ✔
Restrictions by customer group, store and period ✔ ✔
Required and optional items, its own price inside the bundle ✔ ✔
No core patches, three builds: 4.x, 3.x and 2.3 ✔ ✔

Key points

A bundle is triggered by the cart, not a button

A shopper who adds the same items one by one, on different days, gets the same price as one who clicked “buy together”.

The discount is a separate line in the totals

Line item prices aren’t rewritten — the bundle adds a separate named line to the order totals.

One unit of stock can’t be discounted twice

If two bundles overlap, the same physical item won’t receive both discounts: units are “consumed”, and the bundle with the higher priority wins.

The trial starts when you ask

A fresh install is the free version, nothing switches on by itself. The “Try Pro for 7 days” button → e-mail → the key right in the window and by e-mail.

One key — two sites

Moving the store? Unbind the licence on the old domain and activate it on the new one yourself. For studios — keys for 5 or 25 sites, or unlimited.

Technical requirements

  • OpenCart 4.x, 3.x and 2.3 are supported, as well as ocStore builds based on them — each branch has its own build. The module works through OpenCart’s standard events and doesn’t patch the core, so a shop update doesn’t wipe out its changes.

Version history

v1.0.3 OC 4.x v1.0.4 OC 3.x v1.0.3 OC 2.3 Current 26 October 2026

A purchased licence for OpenCart now works without expiry.

v1.0.3

(OpenCart 3.x) — On PHP 8 the Add to Cart button works again when the shop has error display on.

v1.0.2

Fixed the link to the module page in the admin.

All versions (5)
v1.0.1

A gift with required options (size, colour) now goes into the cart with the first available value of each option.

v1.0.0 First release

Product sets with a fixed price or percentage, a “frequently bought together” block on the product page, discount as a separate line in the totals, calculation based on cart contents,…

Frequently bought with Product Bundles and a Free Gift by Order Total for OpenCart 2.3, 3 and 4

4 modules in one order — 40% cheaper than separately

“Store starter” bundle Product Bundles and a Free Gift by Order Total Nova Poshta Premium LiqPay Telegram notifications and Viber/SMS for customers Need more — all 173 modules in All Access for 4 990 ₴.
3 590 ₴ lifetime instead of 5 960 UAH bought separately
Buy the bundle →

Full module description

Product Bundles and a Free Gift by Order Total add a “frequently bought together” block on the product page and an automatic free gift once the order total reaches a threshold. There are three builds: for OpenCart 4.0.2 – 4.1.x, 3.0.2 – 3.0.5.0 and 2.3.0.x; the functionality is identical, only the package differs.

A bundle is triggered by the cart, not a button

A shopper who adds the same items one by one, on different days, gets the same price as one who clicked “buy together”. The discount lives in the bundle rule, not in the button, so it can’t be “lost” by entering the shop from a different angle.

The discount is a separate line in the totals

Line item prices aren’t rewritten — the bundle adds a separate named line to the order totals. So it’s clear exactly what the discount was for: it carries through to checkout, prints on the invoice, and can be pointed to on a return.

One unit of stock can’t be discounted twice

If two bundles overlap, the same physical item won’t receive both discounts: units are “consumed”, and the bundle with the higher priority wins. The discount itself is capped at the value of the items it covers, so no rule can push the order total into the negative.

Gift by order total

The gift is added and removed automatically as the shopper changes the cart, has a badge and a lock on its line, and there’s a hint nearby: “add another N UAH”. It’s an ordinary catalogue item, paid for by that same totals line, not a zero-price duplicate — so stock and reporting stay correct.

The limits you’d normally need

  • Restrictions by customer group, store and validity period.
  • Quantity of each item in the bundle, required and optional items, its own price within the set.
  • Discount as an amount or a percentage, with visible savings shown on the product page.

Why a shop needs this

Bundles work well where a product is rarely bought alone: a phone and a case, a drill and a set of bits, a cream and a remover. The shopper already knows this, but won’t go hunting for the second item in the catalogue — so a “frequently bought together” block right on the product page raises the average order value without any discount on the main item.

A gift by order total is a different tool: it doesn’t raise the order value on its own, it pulls the cart up to a threshold. Someone with 850 UAH in the cart, seeing “150 more to unlock the gift”, is more likely to add something than to leave.

What it looks like for the shopper

Below the price on the product page, a block appears with the second item (or several) and the bundle price. It shows how much each item costs separately and how much together, so the saving reads without a calculator.

In the cart, the bundle discount appears as a separate line in the totals, rather than being “smeared” across item prices. This matters for trust: the shopper sees the same price they saw in the catalogue, plus an explicit “Bundle discount” line.

The gift, once the total reaches the threshold, is added to the cart automatically as a regular item, and its price is taken off by a separate line in the totals.

What the admin gets

A bundle is put together from existing catalogue items: you choose the composition, set the bundle price or a percentage discount. No separate “bundle products” are created — the catalogue doesn’t get cluttered.

For the gift you set a total threshold and the item itself. You can restrict a bundle by customer group, store or period, so a promotion ends on its own, without you being there on a Sunday evening.

Free version and Pro

Pro removes the limit on the number of bundles and gift rules.

Under the hood

The discount calculation lives in the same place where OpenCart calculates the rest of the totals, so it lands correctly in the order, in the customer email, and in exports — not just existing visually in the cart.

The module doesn’t create phantom products or change catalogue prices. Remove the module, and prices stay exactly as they were, with no database cleanup needed.

How to install

1. Upload the archive via “Extensions → Extension Installer” (in OpenCart 2.3 and 3.x — “Installer”).

2. “Extensions → Modules” → find “Product Bundles” and install it.

3. Create the first set: the main item, related items, the bundle price.

4. If you need a gift, set a total threshold and the gift item.

5. Check on a test order that the discount appears as a separate line in the totals.

Questions
about the module

Didn't find the answer? Message us on Telegram and we'll reply within a business day.

@catcode_support Setup, compatibility, activation
Will the discount apply if the shopper added items one by one?

Yes. The bundle is matched against cart contents, so the price is the same for someone who clicked "buy together" and for someone who assembled the cart over several days.

Why a separate line rather than a change to the item price?

So it's visible: the line carries through to checkout, prints on the invoice and is clear on a return. A rewritten item price doesn't give you that.

What happens if two bundles overlap?

Units are "consumed" — the same physical item won't be discounted twice; the bundle with the higher priority wins.

Is the gift a separate product with a 100% discount?

No, it's an ordinary catalogue item, paid for by that same totals line. So stock and reporting aren't broken.

What do I need to install besides the module?

The "CatCode Bundles" totals extension is required as well — without it the bundle is matched but no discount is calculated for anyone.

Not quite what you are looking for?

We build custom modules for WordPress, WooCommerce, OpenCart and Shopify. Tell us about the task and we'll prepare an estimate.

Order a custom module