How to create configurable product in Magento 2 programmatically ?

Welcome to Kishan Savaliya's Magento 2 Blog.In this blog post, I will explain how to create a configurable product in Magento 2 programmatically. We can create configurable product using backend too but in some case if you need to create configurable 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.

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

create_configurableproduct.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\ConfigurableProduct\Model\Product\Type\Configurable::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('Configurable Product name');
    $product->setSku('configurable-product-sku');
    $product->setUrlKey('configurable-product-url-key');
    $product->setPrice(100);
    $product->setWeight(3);
    $product->setStockData(
        [
            'use_config_manage_stock' => 0,
            'manage_stock' => 1,
            'is_in_stock' => 1,
        ]
    );
    $product->setDescription('<p>Configurable Product Description</p>');
    $product->setShortDescription('<p>Configurable 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 configurable product in frontend you can set visibility to catalog, search

    $product->getTypeInstance()->setUsedProductAttributeIds([$product->getResource()->getAttribute('color')->getId(), $product->getResource()->getAttribute('size')->getId()], $product);
    $configurableAttributesData = $product->getTypeInstance()->getConfigurableAttributesAsArray($product);
    $product->setCanSaveConfigurableAttributes(true);
    $product->setConfigurableAttributesData($configurableAttributesData);
    $configurableProductsData = [];
    $product->setConfigurableProductsData($configurableProductsData);

    $product->save();

    $associatedProductIds = [2035, 2036, 2037];

    $configProduct = $objectManager->create(\Magento\Catalog\Model\Product::class)->load($product->getId());
    $configProduct->setCanSaveConfigurableAttributes(true);
    $configProduct->setAssociatedProductIds($associatedProductIds);
    $configProduct->save();
    
    if($configProduct->getId()){
        echo "Configurable 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 configurable product in your Magento.

{{magento_base_url}}/create_configurableproduct.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!