Create Product with custom option dropdown programatically

Viewed 28

Im trying to create product with custom option dropdown programatically but it doesnt work and throw error. Maybe somebody know how to do it, I we be glad to hear it. In my opinion this script work well with single field option but not for dropdown.

PHP Warning: Invalid argument supplied for foreach()

My script file at root directory

<?php


use Magento\Framework\App\Bootstrap;
require 'app/bootstrap.php';
$bootstrap = Bootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();
$state = $objectManager->get('Magento\Framework\App\State');
$state->setAreaCode('frontend');

$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); // instance of object manager
$product = $objectManager->create('\Magento\Catalog\Model\Product');
$product->setSku('watermelon'); // Set your sku here
$product->setName('Watermelon'); // Name of Product
$product->setAttributeSetId(4); // Attribute set id
$product->setStatus(1); // Status on product enabled/ disabled 1/0
$product->setWeight(10); // weight of product
$product->setVisibility(4); // visibilty of product (catalog / search / catalog, search / Not visible individually)
$product->setTaxClassId(0); // Tax class id
$product->setTypeId('simple'); // type of product (simple/virtual/downloadable/configurable)
$product->setPrice(19); // price of product
$product->setStockData(
    array(
        'use_config_manage_stock' => 0,
        'manage_stock' => 1,
        'is_in_stock' => 1,
        'qty' => 29
    )
);

$product->save();

$options = array(
    "title" => "Insurance",
    "type" => "drop_down",
    "is_require" => 0,
    "sort_order" => 10,
    "additional_fields" => array(
        array(
            "title" => "Not necessary",
            "price" => 0,
            "price_type" => "fixed",
            "sku" => "not_necessary",
            "sort_order" => 0
        ),
        array(
            "title" => "1 Year",
            "price" => 0,
            "price_type" => "fixed",
            "sku" => "one_year",
            "sort_order" => 1
        ),
        array(
            "title" => "2 Years",
            "price" => 0,
            "price_type" => "fixed",
            "sku" => "two_years",
            "sort_order" => 2
        ),
        array(
            "title" => "3 Years",
            "price" => 0,
            "price_type" => "fixed",
            "sku" => "three_years",
            "sort_order" => 3
        ),
    )
);

foreach ($options as $arrayOption) {
    $product->setHasOptions(1);
    $product->getResource()->save($product);
    $option = $objectManager->create('\Magento\Catalog\Model\Product\Option')
        ->setProductId($product->getId())
        ->setStoreId($product->getStoreId())
        ->addData($arrayOption);
    $option->save();
    $product->addOption($option);
}
0 Answers
Related