I need to get product collection by child category.
Category Structure:
Shop Colors Rushmore -- 12 Boston Mill Little Cottonwood
Here is my code:
$colorId = 12 (This is my rushmore id(child id))
$categoryFactory = $objectManager->get('\Magento\Catalog\Model\CategoryFactory');
$cat = $categoryFactory->create()->load($colorId);
$categoryProducts = $cat->getProductCollection()->addAttributeToSelect('*')->addCategoryFilter($cat);
foreach ($categoryProducts as $product){
print_r($product->getData()); }
Hi @Shiwani Miglani
Please try once following code:
$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); $cateinstance = $objectManager->create('Magento\Catalog\Model\CategoryFactory'); $cateid = '14'; $allcategoryproduct = $cateinstance->create()->load($cateid)->getProductCollection()->addAttributeToSelect('*');
Hi @Shiwani Miglani
There may be area specific error.
$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); $appState = $objectManager->get('\Magento\Framework\App\State'); $appState->setAreaCode('frontend'); $categoryFactory = $objectManager->get('\Magento\Catalog\Model\CategoryFactory'); $categoryHelper = $objectManager->get('\Magento\Catalog\Helper\Category'); $categoryRepository = $objectManager->get('\Magento\Catalog\Model\CategoryRepository'); $categoryId = 21; // YOUR CATEGORY ID $category = $categoryFactory->create()->load($categoryId); $categoryProducts = $category->getProductCollection() ->addAttributeToSelect('*'); foreach ($categoryProducts as $product) { //print_r($product->getData()); // printing category name and url echo $product->getName() . ' - ' . $product->getProductUrl() . '<br />'; }
I hope it will work for you!
@Shiwani Miglani
Below code is working fine for main and child category both.
<?php use Magento\Framework\App\Bootstrap; include('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(); $cateinstance = $objectManager->create('Magento\Catalog\Model\CategoryFactory'); $cateid = 4; $allcategoryproduct = $cateinstance->create()->load($cateid)->getProductCollection()->addAttributeToSelect('*'); echo "<pre>";print_r($allcategoryproduct->getData()); // Child Category $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); $cateinstance = $objectManager->create('Magento\Catalog\Model\CategoryFactory'); $cateid = 5; $allcategoryproduct = $cateinstance->create()->load($cateid)->getProductCollection()->addAttributeToSelect('*'); echo "<pre>";print_r($allcategoryproduct->getData());
Please check once.
You can copy this code and create a new file on root and check in the browser.
I hope it will work for you.
Hi @Shiwani Miglani ,
Please check the below code and its tested and working fine.
$productCollectionFactory = $objectManager->get('\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory'); $categoryCollectionFactory = $objectManager->get('\Magento\Catalog\Model\CategoryFactory'); $categoryId = '5'; //put your category id here $category = $categoryCollectionFactory->create()->load($categoryId); $collection = $productCollectionFactory->create(); $collection->addAttributeToSelect('*'); $collection->addCategoryFilter($category); $collection->addAttributeToFilter('visibility', \Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH); $collection->addAttributeToFilter('status',\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED); foreach ($collection as $product) { print_r($product->getData()); }
If it works for you then please accept the solution and give Kudos.
Thanks