How to create grouped product in Magento 2 programmatically ?

Welcome to Kishan Savaliya's Magento 2 Blog.In this blog post, I will explain how to create a grouped product in Magento 2 programmatically. We can create grouped product using backend too but in some case if you need to create grouped products again and again then if you will create product from backend then it will take more time and instead of that you can do that easily with simple root script file, it will save your time and that is quite easy to do.

A grouped product is essentially a collection of simple associated products.

Each item purchased appears individually in the shopping cart, rather than as part of the group.

The thumbnail image in the shopping cart can be set to display the image from the grouped parent product or associated product.

So let's start.. Move into your Magento 2 root directory and create below file there..

create_groupedproduct.php

Content for this file is..

<?php
require __DIR__ . '/app/bootstrap.php';
$params = $_SERVER;
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);
$objectManager = $bootstrap->getObjectManager();
$objectManager->get(Magento\Framework\App\State::class)->setAreaCode('frontend');
$product = $objectManager->create(Magento\Catalog\Model\Product::class);

try {
    $product->setTypeId(\Magento\GroupedProduct\Model\Product\Type\Grouped::TYPE_CODE);
    $product->setStatus(\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_DISABLED);
    $product->setAttributeSetId(4); //Set your attribute set ID, I used 4 because I have default Luma theme and I want to use Default attribute set and it's attribute ID is 4, find your ID and set here.
    $product->setName('Grouped Product name');
    $product->setSku('grouped-product-sku');
    $product->setUrlKey('grouped-product-url-key');
    $product->setPrice(100);
    $product->setStockData(
        [
            'use_config_manage_stock' => 0,
            'manage_stock' => 1,
            'min_sale_qty' => 1,
            'max_sale_qty' => 10,
            'is_in_stock' => 1,
            'qty' => 50
        ]
    );
    $product->setDescription('<p>Grouped Product Description</p>');
    $product->setShortDescription('<p>Grouped Product Short Description</p>');
    $product->setWebsiteIds([1]); //Find your website ID and set that ID instead of 1 in array
    $product->setVisibility(\Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH); //To display grouped product in frontend you can set visibility to catalog, search
    $product->save();
    
    $childrenIds = [1, 2, 3]; // Pass your Associated Product ids in array
    $associated = [];
    $position = 0;
    foreach ($childrenIds as $productId)
    {
        $position++;
        $linkedProduct = $objectManager->get(\Magento\Catalog\Api\ProductRepositoryInterface::class)->getById($productId);
        $productLink = $objectManager->create(\Magento\Catalog\Api\Data\ProductLinkInterface::class);
        $productLink->setSku($product->getSku())
            ->setLinkType('associated')
            ->setLinkedProductSku($linkedProduct->getSku())
            ->setLinkedProductType($linkedProduct->getTypeId())
            ->setPosition($position)
            ->getExtensionAttributes()
            ->setQty(1);
        $associated[] = $productLink;
    }
    $product->setProductLinks($associated);
    $product->save();

    if($product->getId()){
        echo "Grouped Product created successfully.";
    }
} catch (\Exception $e) {
    echo $e->getMessage();
}

You can change above content based on your requiremrent. You can simply run below URL in browser it'll create grouped product in your Magento.

{{magento_base_url}}/create_groupedproduct.php

That's it.


Hope you may like this article and can understand this easily. You can add comments below in case if you have any questions regarding this article or if I missed anything here. I will check and get back to you with proper solution.

If you enjoyed this blog post, share it with friends!