I am new to Magento tried several solutions but I could not create orders with 'Bundle Product' by specifying selection options. Even though if it is an API solution, it may be helpful for me, I will modify it as needed.
1 Answer
Please try with below code :
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$productRepository = $objectManager->create(Magento\Catalog\Api\ProductRepositoryInterface::class);
//handle sub-items or sizes
foreach($item->Size as $size){
//$item_name = $name."-".$size->SizeLabel;
$sku = strtolower($size->SizeLabel) . "_" . $pID;
$product = $objectManager->create(\Magento\Catalog\Api\Data\ProductInterface::class);
$product->setSku($sku);
$product->setName($size->SizeLabel); // Name of Product
$product->setAttributeSetId(4);
$product->setStatus(1);
$product->setWeight($size->Weight);
$product->setVisibility(1);
$product->setCustomAttribute('tax_class_id', 0);
$product->setTypeId(\Magento\Catalog\Model\Product\Type::TYPE_SIMPLE); // type of product (simple/virtual/downloadable/configurable)
$product->setPrice($size->UnitPrice); // price of product
/** @var \Magento\CatalogInventory\Api\Data\StockItemInterface $stockItem */
$stockItem = $objectManager->create(\Magento\CatalogInventory\Api\Data\StockItemInterface::class);
$stockItem->setUseConfigManageStock(false);
$stockItem->setManageStock(true);
$stockItem->getIsInStock(true);
$stockItem->setQty(9999);
$productExtension->setStockItem($stockItem);
/** @var \Magento\Catalog\Api\Data\ProductExtensionInterface $productExtension */
$productExtension = $objectManager->create(\Magento\Catalog\Api\Data\ProductExtensionInterface::class);
$product->setExtensionAttributes($productExtension);
$product = $productRepository->save($product, true);
/** @var \Magento\Bundle\Api\Data\LinkInterface $link */
$link = $objectManager->create(\Magento\Bundle\Api\Data\LinkInterface::class);
$link->setPosition(0);
$link->setSku($product->getSku());
$link->setIsDefault(false);
$link->getQty(1);
$link->setPrice($size->UnitPrice);
$link->setPriceType(\Magento\Bundle\Api\Data\LinkInterface::PRICE_TYPE_FIXED);
$links[] = $link;
}
/** @var \Magento\Catalog\Api\Data\ProductInterface $product */
$product = $objectManager->create(\Magento\Catalog\Api\Data\ProductInterface::class);
$product->setSku('sku'); // Set your sku here
//Map product with category
//$category = $this->_saveCategory($item->WebCategory);
//if ($category->getId())
//{
// $product->setCategoryIds([$category->getId()]);
//}
$product->setName($name); // Name of Product
$product->setAttributeSetId(4);
$product->setStatus(1); // Status on product enabled/ disabled 1/0
$product->setWeight($item->Weight); // weight of product
$product->setVisibility(4); // visibilty of product (catalog / search / catalog, search / Not visible individually)
$product->setCustomAttribute('tax_class_id', 0);; // Tax class id
$product->setTypeId(\Magento\Catalog\Model\Product\Type::TYPE_BUNDLE); // type of product (simple/virtual/downloadable/configurable)
$product->setPrice($item->UnitPrice); // price of product
$product->setCustomAttribute('description', $item->WebDescription); // description of product
$productExtension = $objectManager->create(\Magento\Catalog\Api\Data\ProductExtensionInterface::class);
/** @var \Magento\Bundle\Api\Data\OptionInterface $option */
$option = $objectManager->create(\Magento\Bundle\Api\Data\OptionInterface::class);
$option->setTitle('Size');
$option->setType('radio');
$option->setRequired(true);
$option->setPosition(1);
$option->setProductLinks($links);
$productExtension->setBundleOptions([$option]);
/** @var \Magento\CatalogInventory\Api\Data\StockItemInterface $stockItem */
$stockItem = $objectManager->create(\Magento\CatalogInventory\Api\Data\StockItemInterface::class);
$stockItem->setUseConfigManageStock(false);
$stockItem->setManageStock(true);
$stockItem->getIsInStock(true);
$stockItem->setQty(9999);
$productExtension->setStockItem($stockItem);
$product->setExtensionAttributes($productExtension);
$productRepository->save($product, true);
hope its work for you
-
Hi, @Anas Mansuri i am asking to create order, not to create product.– user82154Commented Aug 30, 2019 at 9:57
-
The code you provided is for creating product, instead we would like to have code for creating order of a bundle product Commented Mar 18, 2020 at 10:08