DEV Community

Upper Backlinks
Upper Backlinks

Posted on

How to Assign Custom Product Type to Group Product?

To assign your custom product type products to a group product in Magento, you need to follow a few steps. Unfortunately, Magento does not directly support assigning custom product types to group products through the standard admin interface, so you’ll need to use custom code for this. Here’s a general approach:

Steps to Assign Custom Product Type Products to a Group Product:
Ensure Your Custom Product Type Supports Group Products:

Make sure your custom product type extends from \Magento\GroupedProduct\Model\Product\Type\Grouped or has the necessary implementation to be part of a grouped product.
Create a Script to Assign Products:

Use a custom script to programmatically add your custom product type products to the group product. Below is a sample script to achieve this.
Sample Code:
Create a PHP script in your Magento root directory and run it from the command line or through your web server.

php
Copy code
<?php
require 'app/bootstrap.php';
use Magento\Framework\App\Bootstrap;
use Magento\Framework\App\ObjectManager;

$bootstrap = Bootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();
$state = $objectManager->get('Magento\Framework\App\State');
$state->setAreaCode('adminhtml');

$productRepository = $objectManager->get('Magento\Catalog\Model\ProductRepository');
$groupedProductFactory = $objectManager->get('Magento\GroupedProduct\Model\Product\Type\GroupedFactory');
$stockRegistry = $objectManager->get('Magento\CatalogInventory\Api\StockRegistryInterface');
$productType = 'new_product_type'; // Your custom product type
$groupProductSku = 'group-product-sku'; // SKU of the group product
$customProductSkus = ['custom-product-sku1', 'custom-product-sku2', 'custom-product-sku3']; // SKUs of custom products

try {
// Load the group product
$groupProduct = $productRepository->get($groupProductSku);

// Check if the product is of type grouped
if ($groupProduct->getTypeId() !== 'grouped') {
    throw new \Exception("The specified product is not a grouped product.");
}

// Prepare custom products
$customProducts = [];
foreach ($customProductSkus as $sku) {
    $customProduct = $productRepository->get($sku);
    if ($customProduct->getTypeId() !== $productType) {
        throw new \Exception("Product {$sku} is not of the custom product type.");
    }
    $customProducts[$customProduct->getId()] = [
        'qty' => 1, // Quantity for the grouped product
        'price' => $customProduct->getPrice()
    ];
}

// Add products to the grouped product
$groupedProductFactory->create()->setProduct($groupProduct)->setAssociatedProducts($customProducts);
$productRepository->save($groupProduct);

echo "Products have been successfully assigned to the group product.";
Enter fullscreen mode Exit fullscreen mode

} catch (\Exception $e) {
echo "Error: " . $e->getMessage();
}
Notes:
Ensure Backups: Always back up your database before running custom scripts.
Adjust Script as Needed: Modify the SKU values and custom product type as required.
This script assumes basic familiarity with Magento’s object manager and product repository. If you're unsure, consider consulting with a Magento developer.

Top comments (0)