v1.0.1

Codeholt Bundles for WooCommerce

Create product bundles for WooCommerce — fixed or auto-calculated pricing, automatic savings badges, stock sync, and a choice of product page layouts. Follow the guide below to get started with Free and Pro.

WooCommerce Plugin Product Bundles Gutenberg Block Elementor Widget

Overview

Codeholt Bundles for WooCommerce adds a native "Bundle" product type to your store. A bundle combines several products under one price, adds to cart as a single line item, and keeps its price and stock automatically in sync with the products inside it.

How It Works

1
Install & Activate Install the plugin with WooCommerce active — no extra setup required.
2
Create a Bundle Add a new product, choose the "Bundle product" type, and pick which products it contains.
3
Display It The bundle is a normal product page out of the box — or place it anywhere with the shortcode, block or widget.
A bundle is a real WooCommerce product using native price fields, so it sorts, filters and shows up in price-range widgets exactly like any other product — no custom database tables involved.

1 Creating a Bundle

Bundles are built right on the standard WooCommerce product edit screen.

Steps

  • Go to Products → Add New and set the product type to Bundle product.
  • Open the Bundled Products tab.
  • Search and add products — any published, purchasable product qualifies, including individual variations of a variable product.
  • Set each item's quantity, and optionally hide it from the frontend list while still including it in pricing/stock.
  • Drag rows to reorder — the totals preview updates live as you build.
  • Choose a pricing mode (see Pricing Modes) and a product page layout (see Product Page Layouts), or leave both on their defaults.
  • Publish. Price, savings badge and stock status are calculated automatically.
💡
For a variable product, search for the specific variation you want to bundle rather than the parent — a variable parent has no price of its own.

2 Pricing Modes

Set the pricing mode per bundle from the Bundled Products tab.

ModePlanDescription
Auto calculate FREE The bundle price is the sum of its products' prices. Recalculates automatically whenever a bundled product's own price changes.
Fixed bundle price FREE Set one flat price for the whole bundle — the plugin shows an automatic "Save $X (Y%)" badge next to it.
Percentage discount PRO Take X% off the sum of current bundled-product prices — the regular price stays the full sum, so the savings badge reflects the real discount.
Discount scheduling PRO Optional start/end dates for Fixed or Percentage pricing, using WooCommerce's own native sale schedule — no custom cron involved.

3 Product Page Layouts

Choose how bundled items are listed on the product page — as a site-wide default from Settings, or overridden per bundle.

LayoutPlanDescription
Table FREE Spreadsheet-style rows with image, name, price and quantity columns.
Compact FREE A condensed list, ideal for bundles with many items.
List PRO Vertical rows in a bordered container with a larger product image.
Grid PRO Responsive card tiles with the image on top and centered text.
Inline PRO Compact rounded chips — good for bundles with many small items.
Custom PRO Build your own from the Custom layout builder — columns, item style, image size and content toggles.

4 Displaying Bundles

A published bundle is already a normal product page. To feature it elsewhere on your site, use any of the three options below.

Shortcode

Shortcode
[cbfw_bundle id="123"]

Drop this into any post, page or widget area that supports shortcodes. Replace 123 with the bundle's product ID.

Gutenberg Block

Search for the "Product Bundle" block in the block editor. Pick the bundle, layout and display options right from the block sidebar — no shortcode needed.

Elementor Widget

The "Product Bundle" widget appears under the WooCommerce category in Elementor, with its own style controls for use inside any Elementor layout.

💡
All three display methods share the same card layout setting (Card or Wide) from WooCommerce → Bundles → Settings.

Settings

Global defaults live under WooCommerce → Bundles → Settings.

FieldPlanDescription
Product page layout FREE Site-wide default layout — any bundle can override it from its own edit screen.
Bundle card layout FREE Card or Wide — used by the shortcode, block and Elementor widget.
Included products heading FREE Custom heading text shown above the bundled products list on the product page.
Savings badge toggle FREE Show or hide the "Save X (Y%)" badge next to bundle prices.
Design (accent / savings / border colors, radius) PRO Light-touch styling applied via CSS variables, plus a Custom CSS field.
Custom layout builder PRO Columns, item style, image size and content toggles for the Custom layout.

Hooks & Filters

Actions and filters throughout pricing, layouts, admin tabs, import/export and settings — this is exactly what the Pro add-on itself is built on.

Filters

FilterDescription
cbfw_bundled_productsResolved bundled items before they are used.
cbfw_can_bundle_productWhether a product may be bundled.
cbfw_pricing_modesRegistered pricing mode slugs. Default array( 'auto', 'fixed' ).
cbfw_custom_mode_pricesSupply regular/sale prices for a custom pricing mode.
cbfw_product_layoutsRegistered single-product layouts.
cbfw_bundle_layoutLayout used for one specific bundle.
cbfw_bundle_card_htmlRendered card markup (shortcode/block/widget).
cbfw_show_savings_badgeWhether the savings badge is shown.
cbfw_savings_badge_textBadge text — must already be escaped.
cbfw_inline_cssExtra CSS appended to the frontend stylesheet.
cbfw_structured_dataBundle structured data markup.
cbfw_save_bundled_itemsSanitized items before they are saved.
cbfw_save_settingsSettings before they are written to the database.
cbfw_bundle_choices_limitMax bundles listed in editor dropdowns. Default 200.
cbfw_overview_daysReporting period for the analytics overview. Default 30.
cbfw_child_search_helpHelp tip under the bundle builder's product search.

Actions

ActionDescription
cbfw_loadedFires once the plugin is fully loaded.
cbfw_bundle_syncedAfter a bundle's price and stock are resynced.
cbfw_order_line_item_createdAfter bundle meta is written to an order line item.
cbfw_import_bundleAfter a bundle is created from an import row, before prices resync.
cbfw_before_bundled_items / cbfw_after_bundled_itemsAround the included-products list on the product page.
cbfw_pricing_fieldsExtra fields in the product data pricing area.
cbfw_after_builder_panelAfter the Bundled Products panel.
cbfw_settings_sectionsExtra sections on the Settings tab.
cbfw_layout_card_fieldsExtra fields inside the Layout settings card.
cbfw_overview_actionsToolbar area of the analytics overview.
cbfw_admin_tab_{$tab}Renders the body of a custom admin tab.
These are exactly the extension points the Pro add-on consumes — nothing is reserved. Build your own extension the same way.

Templates

Every template file can be overridden from your theme, the standard WooCommerce way.

Override path
yourtheme/codeholt-bundles-for-woocommerce/
TemplateUsed for
templates/bundle-card.phpThe card used by the shortcode, block and Elementor widget.
templates/single-product/add-to-cart/bundle.phpThe bundle area on the single product page.

Copy the file into your theme keeping the same sub-folder structure, then edit your copy — the plugin's original stays untouched.

Codeholt Bundles for WooCommerce Pro

A paid add-on that installs alongside this free plugin and unlocks percentage discounts with scheduling, quantity rules, three extra product page layouts with a custom layout builder, a Custom CSS panel, advanced reports and automatic updates — all through the same license server.

🚀
Get it at https://codeholt.com/products/codeholt-bundles-for-woocommerce-pro/. Install it next to Codeholt Bundles for WooCommerce, activate your license under WooCommerce → Bundles → License, and every Pro feature below appears automatically.

Free vs Pro

Everything in Free is included in Pro, plus the rows below.

Feature Free Pro
Unlimited bundles — Table & Compact layouts
Auto or fixed bundle pricing
Shortcode, Gutenberg block & Elementor widget
Savings badge, JSON import/export, sales overview
Bundle simple products and product variations
Percentage discount pricing + discount scheduling
Min / max quantity rules per order
Custom savings badge text + shop page badge
List, Grid, Inline & Custom layout builder
Custom CSS panel
Advanced reports with date ranges + CSV export
Automatic one-click plugin updates
Priority support

What's Included

Once Pro is active and licensed, these additions appear directly inside the existing free-plugin admin pages — no separate menu.

AdditionWhere
Discount (%) + schedule fieldsProduct edit screen → Bundled Products tab, next to the pricing mode.
Min / max quantity fieldsProduct edit screen → Bundled Products tab, own field group.
List, Grid, Inline layoutsSettings → Product page layout, and each bundle's own layout picker.
Custom layout builderSettings → its own "Custom layout (Pro)" card.
Design card (accent / savings / border colors, radius)Settings → "Design" card.
Custom CSS panelSettings → bottom of the Design card.
Savings badge text templateSettings → bottom of the Layout card.
Period selector + CSV exportOverview tab toolbar (7/30/90/365 days).
Discount %, quantity rules, sale datesRound-trip automatically in JSON/CSV import/export.
License tabNew tab, always last on the Bundles admin page.

License & Updates

Pro activates against Codeholt's license server and then updates itself — no manual re-download needed.

Activating Your License

  • Install and activate the Pro plugin alongside the free plugin.
  • Go to WooCommerce → Bundles → License.
  • Paste the license key you received with your purchase and click Activate license.
  • Every Pro feature above appears immediately — no page reload of the rest of the site is required.
Deactivate your license from the same License tab before moving Pro to a different domain, or before uninstalling — this frees up the activation slot on the license server.

Automatic Updates

Once licensed, the Pro plugin checks Codeholt's license server for new versions and delivers one-click updates straight from the regular WordPress Plugins screen — the same update experience as any WordPress.org plugin, with no separate download step.

If your license expires or is deactivated, Pro features and update checks stop — your bundles and their data are untouched, and everything keeps working on the free plugin's own feature set.