Hello Magento Folks,
Welcome to Create Product Programmatically series where I will illustrate How to Create Bundled Product Programmatically in Magento 2. Basically, a bundle product is considered similar to a simple product or a grouped product which are purchased as a combo or group. Check out all the product types in detail at Magento 2 Product Types: All You Need to Know Guide. Check out the below code to create bundled products programmatically in Magento 2 store.
Mainly we can create 6 types of products Programmatically in Magento 2:
- Simple Product
- Configurable Product
- Grouped Product
- Virtual Product
- Bundle Product
- Downloadable Product
Steps to Create Bundled Product Programmatically in Magento 2:
Step 1: Firstly, create a bundle_product.php file in the Magento root directory and add the below given code to it.
<?php
use Magento\Framework\AppInterface;
try {
require_once __DIR__ . '/app/bootstrap.php';
} catch (\Exception $e) {
echo 'Autoload error: ' . $e->getMessage();
exit(1);
}
try {
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();
$appState = $objectManager->get('Magento\Framework\App\State');
$appState->setAreaCode('frontend');
$bundle_product = $objectManager->create('Magento\Catalog\Model\Product');
$bundle_product->setStatus(1); // status enabled/disabled 1/0
$bundle_product->setName('Bundle Product'); // Set Your Bundle Name of Product
$bundle_product->setTypeId('bundle'); // Set Product Type Id (simple/virtual/downloadable/configurable/grouped/bundle)
$bundle_product->setAttributeSetId(4); // Set Attribute Set ID
$bundle_product->setSku('bundle_product_sku'); // Set Bundle Product SKU
$bundle_product->setSkuType(1); // Yes (0) / No (1)
$bundle_product->setWebsiteIds(array(1)); // Set Website Ids
$bundle_product->setVisibility(4); // visibility of product (Not Visible Individually (1) / Catalog (2)/ Search (3)/ Catalog, Search(4))
$bundle_product->setShipmentType(0); // Together (0) / Separately (1)
$category_id = array(2, 3);
$bundle_product->setCategoryIds($category_id);
$bundle_product->setStockData(
[
'use_config_manage_stock' => 1,
'manage_stock' => 1,
'is_in_stock' => 1,
]
);
$bundle_product->save();
$bundle_product = $objectManager->create('Magento\Catalog\Model\Product')->load($bundle_product->getId());
// Set Bundle Options Data
$bundle_product->setBundleOptionsData(
[
[
'title' => 'Bundle Product Items title 1',
'default_title' => 'Bundle Product Items title 1',
'type' => 'radio',
'required' => 1,
'delete' => '',
],
[
'title' => 'Bundle Product Items title 2',
'default_title' => 'Bundle Product Items title 2',
'type' => 'checkbox',
'required' => 1,
'delete' => '',
]
]
)->setBundleSelectionsData(
[
[
['product_id' => 1, 'selection_qty' => 1, 'selection_can_change_qty' => 1, 'delete' => ''],
['product_id' => 9, 'selection_qty' => 1, 'selection_can_change_qty' => 1, 'delete' => ''],
],
[
['product_id' => 34, 'selection_qty' => 1, 'selection_can_change_qty' => 1, 'delete' => ''],
['product_id' => 35, 'selection_qty' => 1, 'selection_can_change_qty' => 1, 'delete' => ''],
],
]
);
// setBundleSelectionsData set your Product Id
if ($bundle_product->getBundleOptionsData()) {
$options = [];
foreach ($bundle_product->getBundleOptionsData() as $key => $option_data) {
if (!(bool)$option_data['delete']) {
$option = $objectManager->create('Magento\Bundle\Api\Data\OptionInterface');
$option->setData($option_data);
$option->setSku($bundle_product->getSku());
$option->setOptionId(null);
$links_array = [];
$bundle_links_data = $bundle_product->getBundleSelectionsData();
if (!empty($bundle_links_data[$key])) {
foreach ($bundle_links_data[$key] as $linkdata) {
if (!(bool)$linkdata['delete']) {
$link = $objectManager->create('Magento\Bundle\Api\Data\LinkInterface');
$link->setData($linkdata);
$linkProduct = $objectManager->get('\Magento\Catalog\Api\ProductRepositoryInterface')->getById($linkdata['product_id']);
$link->setSku($linkProduct->getSku());
$link->setQty($linkdata['selection_qty']);
if (isset($linkdata['selection_can_change_qty'])) {
$link->setCanChangeQuantity($linkdata['selection_can_change_qty']);
}
$links_array[] = $link;
}
}
$option->setProductLinks($links_array);
$options[] = $option;
}
}
}
$extension_attribute = $bundle_product->getExtensionAttributes();
$extension_attribute->setBundleProductOptions($options);
$bundle_product->setExtensionAttributes($extension_attribute);
}
$bundle_product->save();
if ($bundle_product->getId()) {
echo "Bundle Product Created Successfully.";
}
}catch (\Exception $e) {
echo $e->getMessage();
}Step 2: After the above step add run below URL.
https://yourdomain.com/bundle_product.php
Wrap Up:
Hopefully, all are able to Create Bundled Product Programmatically in Magento 2 using the code above. In case you come across any errors then comment down your queries in the comment section below I will solve them there. You can also take the help of our certified Magento Developers.
Share the article with your Friends.
Happy Reading!



