3

This question already has an answer here:

I would like to create categories programmatically in magento 2.

Please suggest me proper code for it.

I have try this code Link but not working properly . I have to create number of categories on one code with sub-categoties. like import export.

marked as duplicate by Fabian Schmengler, Marius Sep 6 '16 at 10:12

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

9
use \Magento\Framework\App\Bootstrap;

include('../app/bootstrap.php');
$bootstrap = Bootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();
$url = \Magento\Framework\App\ObjectManager::getInstance();
$storeManager = $url->get('\Magento\Store\Model\StoreManagerInterface');
$mediaurl= $storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
$state = $objectManager->get('\Magento\Framework\App\State');
$state->setAreaCode('frontend');
/// Get Website ID
$websiteId = $storeManager->getWebsite()->getWebsiteId();
echo 'websiteId: '.$websiteId." ";

/// Get Store ID
$store = $storeManager->getStore();
$storeId = $store->getStoreId();
echo 'storeId: '.$storeId." ";

/// Get Root Category ID
$rootNodeId = $store->getRootCategoryId();
echo 'rootNodeId: '.$rootNodeId." ";
/// Get Root Category
$rootCat = $objectManager->get('Magento\Catalog\Model\Category');
$cat_info = $rootCat->load($rootNodeId);

$categorys=array('Levis','Wranglers','Basics'); // Category Names
foreach($categorys as $cat)
{

$name=ucfirst($cat);
$url=strtolower($cat);
$cleanurl = trim(preg_replace('/ +/', '', preg_replace('/[^A-Za-z0-9 ]/', '', urldecode(html_entity_decode(strip_tags($url))))));
$categoryFactory=$objectManager->get('\Magento\Catalog\Model\CategoryFactory');
/// Add a new sub category under root category
$categoryTmp = $categoryFactory->create();
$categoryTmp->setName($name);
$categoryTmp->setIsActive(true);
$categoryTmp->setUrlKey($cleanurl);
$categoryTmp->setData('description', 'description');
$categoryTmp->setParentId($rootCat->getId());
$mediaAttribute = array ('image', 'small_image', 'thumbnail');
$categoryTmp->setImage('/m2.png', $mediaAttribute, true, false);// Path pub/meida/catalog/category/m2.png
$categoryTmp->setStoreId($storeId);
$categoryTmp->setPath($rootCat->getPath());
$categoryTmp->save();
}

This will add add multiple category programmatically below to the root category of magento2

set category path and do the reindex and flush cache

For reference you can chk.

http://blog.mdnsolutions.com/magento-2-add-category-programmatically/

https://vinothkumaarr.wordpress.com/2016/05/13/add-multiple-category-programmatically-magento2/

  • 2
    this ->save() method is deprecated, I think the way to go is to use repository instead. – Vladimir Despotovic Apr 10 '17 at 16:27
  • 1
    This worked only half for me. I needed to save the category so I can get the ID, and then set the "path" on the category using the new ID, then save again. In my case the "path" had an invalid value and was not visible in the category tree in Magento Admin. Setting the path by hand in a 2nd step worked fine. – Wouter Oct 25 '18 at 13:33

Not the answer you're looking for? Browse other questions tagged or ask your own question.