{"id":347653,"date":"2026-08-05T05:58:17","date_gmt":"2026-08-05T05:58:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/bundle-product-for-woocommerce\/"},"modified":"2026-08-05T06:16:48","modified_gmt":"2026-08-05T06:16:48","slug":"codeholt-bundles-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/codeholt-bundles-for-woocommerce\/","author":18473085,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0.2","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Codeholt Bundles for WooCommerce","header_author":"Codeholt","header_description":"Create product bundles for WooCommerce \u2014 increase Average Order Value with fixed-price bundles, auto price calculation, stock sync, Gutenberg block, Elementor widget and analytics.","assets_banners_color":"7b6aa1","last_updated":"2026-08-05 06:16:48","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/ashrafulsarkar\/codeholt-bundles-for-woocommerce","header_author_uri":"https:\/\/codeholt.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":31,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"ashrafulsarkar","date":"2026-08-05 06:16:48"}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3634882,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3634882,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3634882,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3634882,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"cbfw\/bundle":{"name":"cbfw\/bundle","title":"Product Bundle"}},"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3634882,"resolution":"1","location":"assets","locale":"","width":1600,"height":733},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3634882,"resolution":"2","location":"assets","locale":"","width":1600,"height":1205},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3634882,"resolution":"3","location":"assets","locale":"","width":1600,"height":709},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3634882,"resolution":"4","location":"assets","locale":"","width":1600,"height":494},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3634882,"resolution":"5","location":"assets","locale":"","width":1600,"height":764},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3634882,"resolution":"6","location":"assets","locale":"","width":1600,"height":1000},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3634882,"resolution":"7","location":"assets","locale":"","width":1600,"height":1141},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3634882,"resolution":"8","location":"assets","locale":"","width":1600,"height":686}},"screenshots":{"1":"A bundle on the product page using the Table layout \u2014 included products, the automatic \"Save X (Y%)\" badge and the total bundle price.","2":"The bundle builder on the product edit screen: pricing mode, fixed bundle price, page layout and the drag &amp; drop product list with a live totals preview.","3":"The same bundle rendered with the Compact layout.","4":"Bundles in the cart \u2014 one line item each, with contents and savings listed.","5":"The analytics overview under WooCommerce \u2192 Bundles: bundles sold, revenue, customer savings, top bundle and a per-bundle sales table.","6":"The \"Product Bundle\" Gutenberg block, with bundle, layout and display options in the block sidebar.","7":"WooCommerce \u2192 Bundles \u2192 Settings: default layouts, the included-products heading and the savings badge toggle.","8":"Import \/ Export: download every bundle as JSON or CSV, and import bundles back in by dropping in a JSON file."}},"plugin_section":[],"plugin_tags":[14503,13788,73297,1311,286],"plugin_category":[45],"plugin_contributors":[194883,274486],"plugin_business_model":[],"class_list":["post-347653","plugin","type-plugin","status-publish","hentry","plugin_tags-bundle","plugin_tags-cross-sell","plugin_tags-product-bundle","plugin_tags-upsell","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-ashrafulsarkar","plugin_contributors-codeholt","plugin_committers-ashrafulsarkar"],"banners":{"banner":"https:\/\/ps.w.org\/codeholt-bundles-for-woocommerce\/assets\/banner-772x250.png?rev=3634882","banner_2x":"https:\/\/ps.w.org\/codeholt-bundles-for-woocommerce\/assets\/banner-1544x500.png?rev=3634882","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/codeholt-bundles-for-woocommerce\/assets\/icon-128x128.png?rev=3634882","icon_2x":"https:\/\/ps.w.org\/codeholt-bundles-for-woocommerce\/assets\/icon-256x256.png?rev=3634882","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/codeholt-bundles-for-woocommerce\/assets\/screenshot-1.png?rev=3634882","caption":"A bundle on the product page using the Table layout \u2014 included products, the automatic \"Save X (Y%)\" badge and the total bundle price."},{"src":"https:\/\/ps.w.org\/codeholt-bundles-for-woocommerce\/assets\/screenshot-2.png?rev=3634882","caption":"The bundle builder on the product edit screen: pricing mode, fixed bundle price, page layout and the drag &amp; drop product list with a live totals preview."},{"src":"https:\/\/ps.w.org\/codeholt-bundles-for-woocommerce\/assets\/screenshot-3.png?rev=3634882","caption":"The same bundle rendered with the Compact layout."},{"src":"https:\/\/ps.w.org\/codeholt-bundles-for-woocommerce\/assets\/screenshot-4.png?rev=3634882","caption":"Bundles in the cart \u2014 one line item each, with contents and savings listed."},{"src":"https:\/\/ps.w.org\/codeholt-bundles-for-woocommerce\/assets\/screenshot-5.png?rev=3634882","caption":"The analytics overview under WooCommerce \u2192 Bundles: bundles sold, revenue, customer savings, top bundle and a per-bundle sales table."},{"src":"https:\/\/ps.w.org\/codeholt-bundles-for-woocommerce\/assets\/screenshot-6.png?rev=3634882","caption":"The \"Product Bundle\" Gutenberg block, with bundle, layout and display options in the block sidebar."},{"src":"https:\/\/ps.w.org\/codeholt-bundles-for-woocommerce\/assets\/screenshot-7.png?rev=3634882","caption":"WooCommerce \u2192 Bundles \u2192 Settings: default layouts, the included-products heading and the savings badge toggle."},{"src":"https:\/\/ps.w.org\/codeholt-bundles-for-woocommerce\/assets\/screenshot-8.png?rev=3634882","caption":"Import \/ Export: download every bundle as JSON or CSV, and import bundles back in by dropping in a JSON file."}],"raw_content":"<!--section=description-->\n<p><strong>Codeholt Bundles for WooCommerce<\/strong> adds a lightweight, native \"Bundle\" product type to your store. Combine multiple products into one bundle with a fixed discounted price (or auto-calculated price), show customers exactly how much they save, and sell more per order \u2014 one cart line, correct stock handling, and native WooCommerce price fields so sorting and filtering keep working.<\/p>\n\n<h4>Why bundles?<\/h4>\n\n<ul>\n<li>Increase Average Order Value (AOV)<\/li>\n<li>Improve cross-selling and upselling<\/li>\n<li>Reduce cart abandonment with clear savings<\/li>\n<li>Simplify product packaging<\/li>\n<\/ul>\n\n<h4>Bundle builder<\/h4>\n\n<p>Search, add, remove and drag &amp; drop reorder products right on the product edit screen's <strong>Bundled Products<\/strong> tab. Each item gets its own quantity and an optional \"hide on frontend\" toggle, with a live totals preview while you build.<\/p>\n\n<h4>Flexible pricing<\/h4>\n\n<ul>\n<li><strong>Auto calculate<\/strong> \u2014 the bundle price is the sum of its products' prices.<\/li>\n<li><strong>Fixed bundle price<\/strong> \u2014 set a flat price and the plugin shows an automatic \"Save $X (Y%)\" badge.<\/li>\n<li><strong>Automatic price sync<\/strong> \u2014 the bundle's price and savings recalculate whenever a bundled product's own price changes.<\/li>\n<li>Prices live in WooCommerce's native price fields, so bundles sort, filter and show up in price-range widgets like any other product.<\/li>\n<\/ul>\n\n<h4>Stock management<\/h4>\n\n<p>Validates and reduces bundled product stock on purchase, prevents overselling when a child product runs low or out of stock, restores stock on cancellation\/refund, and keeps bundle availability live-synced to its children.<\/p>\n\n<h4>Cart, checkout &amp; orders<\/h4>\n\n<p>The whole bundle adds to cart as <strong>one line item<\/strong>, with its contents and total savings shown \u2014 fully working in both the classic cart\/checkout and the WooCommerce Cart &amp; Checkout blocks. The same details carry through to the order-received page, order emails, and the admin order screen.<\/p>\n\n<h4>Product page layouts<\/h4>\n\n<p>Two built-in layouts, <strong>Table<\/strong> and <strong>Compact<\/strong>, selectable as a site-wide default or overridden per bundle from <strong>WooCommerce \u2192 Bundles \u2192 Settings<\/strong>.<\/p>\n\n<h4>Settings<\/h4>\n\n<p>Set the default product-page layout and bundle-listing card style, customize the \"included products\" section heading, and toggle the savings badge on or off \u2014 all from <strong>WooCommerce \u2192 Bundles \u2192 Settings<\/strong>.<\/p>\n\n<h4>Analytics overview<\/h4>\n\n<p>A cached, HPOS-aware dashboard under <strong>WooCommerce \u2192 Bundles<\/strong> showing total bundles sold, total revenue, total customer savings, the top-selling bundle, and a per-bundle sales table with revenue-share bars.<\/p>\n\n<h4>Import \/ Export<\/h4>\n\n<p>Export every bundle as a re-importable <strong>JSON<\/strong> file (matches bundled products by SKU) or as a <strong>CSV<\/strong> report, and import bundles back in through a simple drag-and-drop dropzone.<\/p>\n\n<h4>Display anywhere<\/h4>\n\n<ul>\n<li><strong>Shortcode<\/strong> \u2014 <code>[cbfw_bundle id=\"123\"]<\/code><\/li>\n<li><strong>Gutenberg block<\/strong> \u2014 \"Product Bundle\", pick the bundle, layout and display options right in the block editor<\/li>\n<li><strong>Elementor widget<\/strong> \u2014 \"Product Bundle\" widget with its own style controls<\/li>\n<\/ul>\n\n<h4>SEO, accessibility &amp; performance<\/h4>\n\n<ul>\n<li>Enriched structured data for bundles (bundle contents exposed to search engines)<\/li>\n<li>ARIA labels on interactive frontend markup<\/li>\n<li>Conditional asset loading \u2014 no bundle assets load on pages that don't need them<\/li>\n<li>Cached analytics queries and full HPOS (High-Performance Order Storage) compatibility<\/li>\n<\/ul>\n\n<h4>Developer friendly<\/h4>\n\n<p>Actions and filters throughout (pricing, layouts, admin tabs, import\/export, settings) and fully overridable templates. See the <strong>Other Notes<\/strong> tab for the full hook list.<\/p>\n\n<h4>Compatibility<\/h4>\n\n<ul>\n<li>WooCommerce HPOS (High-Performance Order Storage)<\/li>\n<li>WooCommerce Cart &amp; Checkout Blocks<\/li>\n<li>Gutenberg and Elementor<\/li>\n<li>Any well-coded theme<\/li>\n<\/ul>\n\n<h4>Template overrides<\/h4>\n\n<p>Copy any file from the plugin's <code>templates\/<\/code> directory into <code>yourtheme\/codeholt-bundles-for-woocommerce\/<\/code>, keeping the same sub-folder structure, and edit your copy:<\/p>\n\n<ul>\n<li><code>templates\/bundle-card.php<\/code> \u2014 the card used by the shortcode, block and Elementor widget.<\/li>\n<li><code>templates\/single-product\/add-to-cart\/bundle.php<\/code> \u2014 the bundle area on the single product page.<\/li>\n<\/ul>\n\n<h4>Filters<\/h4>\n\n<ul>\n<li><code>cbfw_bundled_products<\/code> \u2014 ( array $resolved, CBFW_Product_Bundle $bundle ) Resolved bundled items before they are used.<\/li>\n<li><code>cbfw_can_bundle_product<\/code> \u2014 ( bool $can, WC_Product $product ) Whether a product may be bundled.<\/li>\n<li><code>cbfw_pricing_modes<\/code> \u2014 ( array $modes ) Registered pricing modes. Default <code>array( 'auto', 'fixed' )<\/code>.<\/li>\n<li><code>cbfw_custom_mode_prices<\/code> \u2014 ( null|array $prices, CBFW_Product_Bundle $bundle, string $mode, array $totals ) Return <code>array( 'regular' =&gt; \u2026, 'sale' =&gt; \u2026 )<\/code> to supply prices for a custom mode.<\/li>\n<li><code>cbfw_product_layouts<\/code> \u2014 ( array $layouts ) Registered single-product layouts.<\/li>\n<li><code>cbfw_bundle_layout<\/code> \u2014 ( string $layout, CBFW_Product_Bundle $bundle ) Layout used for one bundle.<\/li>\n<li><code>cbfw_bundle_card_html<\/code> \u2014 ( string $html, CBFW_Product_Bundle $bundle, array $args ) Rendered card markup.<\/li>\n<li><code>cbfw_show_savings_badge<\/code> \u2014 ( bool $show, WC_Product $product ) Whether the savings badge is shown.<\/li>\n<li><code>cbfw_savings_badge_text<\/code> \u2014 ( string $badge, WC_Product $product, array $pricing ) Badge text. Must be escaped.<\/li>\n<li><code>cbfw_inline_css<\/code> \u2014 ( string $css, array $settings ) Extra CSS appended to the frontend stylesheet.<\/li>\n<li><code>cbfw_structured_data<\/code> \u2014 ( array $markup, CBFW_Product_Bundle $bundle ) Bundle structured data.<\/li>\n<li><code>cbfw_save_bundled_items<\/code> \u2014 ( array $items, WC_Product $product ) Sanitized items before they are saved.<\/li>\n<li><code>cbfw_save_settings<\/code> \u2014 ( array $settings ) Settings before they are written to the database.<\/li>\n<li><code>cbfw_bundle_choices_limit<\/code> \u2014 ( int $limit ) Max bundles listed in pickers. Default <code>200<\/code>.<\/li>\n<li><code>cbfw_overview_days<\/code> \u2014 ( int $days ) Reporting period for the analytics overview. Default <code>30<\/code>.<\/li>\n<li><code>cbfw_child_search_help<\/code> \u2014 ( string $text ) Help tip under the bundle builder's product search.<\/li>\n<\/ul>\n\n<h4>Actions<\/h4>\n\n<ul>\n<li><code>cbfw_loaded<\/code> \u2014 Fires once the plugin is fully loaded.<\/li>\n<li><code>cbfw_bundle_synced<\/code> \u2014 ( CBFW_Product_Bundle $bundle ) After a bundle's price and stock are resynced.<\/li>\n<li><code>cbfw_order_line_item_created<\/code> \u2014 ( WC_Order_Item_Product $item, CBFW_Product_Bundle $bundle ) After bundle meta is written to an order line item.<\/li>\n<li><code>cbfw_import_bundle<\/code> \u2014 ( CBFW_Product_Bundle $bundle, array $bundle_data ) After a bundle is created from an import row, before prices are resynced.<\/li>\n<li><code>cbfw_before_bundled_items<\/code> \/ <code>cbfw_after_bundled_items<\/code> \u2014 ( CBFW_Product_Bundle $bundle ) Around the included-products list on the product page.<\/li>\n<li><code>cbfw_pricing_fields<\/code> \u2014 ( WP_Post $post ) Extra fields in the product data pricing area.<\/li>\n<li><code>cbfw_after_builder_panel<\/code> \u2014 ( WP_Post $post ) After the Bundled Products panel.<\/li>\n<li><code>cbfw_settings_sections<\/code> \u2014 ( array $settings ) Extra sections on the Settings tab.<\/li>\n<li><code>cbfw_layout_card_fields<\/code> \u2014 ( array $settings ) Extra fields inside the layout settings card.<\/li>\n<li><code>cbfw_overview_actions<\/code> \u2014 ( int $days ) Toolbar area of the analytics overview.<\/li>\n<li><code>cbfw_admin_tab_{$tab}<\/code> \u2014 Renders the body of a custom admin tab.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin to <code>\/wp-content\/plugins\/<\/code> or install via the Plugins screen.<\/li>\n<li>Activate the plugin. WooCommerce must be active.<\/li>\n<li>Go to <strong>Products \u2192 Add New<\/strong>, choose the <strong>Bundle product<\/strong> type.<\/li>\n<li>Open the <strong>Bundled Products<\/strong> tab, add products, choose a pricing mode and publish.<\/li>\n<li>Optionally visit <strong>WooCommerce \u2192 Bundles \u2192 Settings<\/strong> to set default layouts and the savings badge.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"which%20products%20can%20be%20bundled%3F\"><h3>Which products can be bundled?<\/h3><\/dt>\n<dd><p>Any published, purchasable product \u2014 simple products and individual variations of variable products. Pick the specific variation you want to bundle rather than the variable parent, which has no price of its own.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20the%20new%20woocommerce%20cart%20and%20checkout%20blocks%3F\"><h3>Does it work with the new WooCommerce cart and checkout blocks?<\/h3><\/dt>\n<dd><p>Yes \u2014 bundle contents and savings display correctly in both classic and block-based cart\/checkout.<\/p><\/dd>\n<dt id=\"can%20i%20override%20the%20templates%3F\"><h3>Can I override the templates?<\/h3><\/dt>\n<dd><p>Yes. Copy any file from <code>templates\/<\/code> into <code>yourtheme\/codeholt-bundles-for-woocommerce\/<\/code> and edit it.<\/p><\/dd>\n<dt id=\"does%20the%20bundle%20price%20update%20automatically%3F\"><h3>Does the bundle price update automatically?<\/h3><\/dt>\n<dd><p>Yes. If you use auto-calculated pricing, the bundle's price and savings recalculate whenever a bundled product's price changes, with no manual resave needed.<\/p><\/dd>\n<dt id=\"is%20this%20compatible%20with%20high-performance%20order%20storage%20%28hpos%29%3F\"><h3>Is this compatible with High-Performance Order Storage (HPOS)?<\/h3><\/dt>\n<dd><p>Yes, the plugin declares and is fully tested with HPOS enabled.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20hide%20or%20lock%20any%20features%20behind%20an%20upsell%3F\"><h3>Does this plugin hide or lock any features behind an upsell?<\/h3><\/dt>\n<dd><p>No. Every feature listed above is fully usable with no artificial limits, nag screens or disabled UI.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0 - 05-08-2026<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Create product bundles for WooCommerce with fixed pricing, automatic savings, stock sync, Gutenberg block, Elementor widget and analytics.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/347653","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=347653"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ashrafulsarkar"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=347653"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=347653"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=347653"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=347653"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=347653"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=347653"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}