Magento 2 Grouped Products are simple individual products presented as grouped.
There are six product types in Magento 2:
- Simple Product
- Configurable Product
- Grouped Product
- Virtual Product
- Bundle Product
- Downloadable Product
Grouped products in Magento 2 can be a variation of a single product or group them by theme. Doing so encourages the customers to buy additional items too. Offer variations of a product, and offer them all on a single page with the grouped products.
However, each product in a group is bought as a separate item and the quantity purchased is displayed as a separate line item.
An example of grouped products is a computer with a mouse, keyboard, mic, and front cam.
Method To Programmatically Create Grouped Product In Magento 2:
<?php namespace [Vender]\[Module]\Controller\Index; use Magento\Framework\App\Action\Action; use Magento\Framework\App\Action\Context; use Magento\Framework\Exception\CouldNotSaveException; use Magento\Framework\Exception\InputException; use Magento\Framework\Exception\NoSuchEntityException; use Magento\Framework\Exception\StateException; use Magento\Framework\View\Asset\Repository; use Magento\Framework\View\Result\PageFactory; use Magento\Catalog\Api\ProductRepositoryInterface; use Magento\Catalog\Api\Data\ProductLinkInterface; use Magento\Catalog\Model\Product; use Magento\GroupedProduct\Model\Product\Type\Grouped; use Magento\Catalog\Model\Product\Visibility; use Magento\Catalog\Model\Product\Attribute\Source\Status; class Example extends Action { private $pageFactory; private $productRepository; private $product; protected $assetRepo; protected $categoryLinkManagement; private $productLink; public function __construct( Context $context, PageFactory $pageFactory, ProductRepositoryInterface $productRepository, Product $product, Repository $assetRepo, ProductLinkInterface $productLink ) { parent::__construct($context); $this->productRepository = $productRepository; $this->productLink = $productLink; $this->assetRepo = $assetRepo; $this->product = $product; $this->pageFactory = $pageFactory; } public function execute() { $this->AddGroupProduct(); $page = $this->pageFactory->create(); return $page; } public function AddGroupProduct() { try { $this->product->setTypeId(Grouped::TYPE_CODE) ->setAttributeSetId(4) ->setName('Grouped Product') ->setSku('Grouped Product') ->setVisibility(Visibility::VISIBILITY_BOTH) ->setStatus(Status::STATUS_ENABLED) ->setStockData(['use_config_manage_stock' => 1, 'is_in_stock' => 1]); $childrenIds = array(1, 2); $associated = array(); $position = 0; foreach ($childrenIds as $productId) { $position++; $linkedProduct = $this->productRepository->getById($productId); $this->productLink->setSku($this->product->getSku()) ->setLinkType('associated') ->setLinkedProductSku($linkedProduct->getSku()) ->setLinkedProductType($linkedProduct->getTypeId()) ->setPosition($position) ->getExtensionAttributes() ->setQty(1); $associated[] = $this->productLink; } $this->product->setProductLinks($associated); $this->productRepository->save($this->product); } catch (CouldNotSaveException $e) { } catch (InputException $e) { } catch (StateException $e) { } catch (NoSuchEntityException $e) { } } }
That’s it.
Do share the post with fellow developers via social media.
Thank you.