How to get all products of category using category id in magento 2?

  • you want this in a block or in a model? – Marius Jan 6 '16 at 13:37
  • i want all product of category in homepage. i got already category id and based on that i want fetch all product of category – Rakesh Jesadiya Jan 6 '16 at 13:38
  • i have call block for getting category collection so its best to get in block class. – Rakesh Jesadiya Jan 6 '16 at 13:43
  • @RakeshJesadiya Sorry for posting here but I need your help on this issue magento.stackexchange.com/questions/293795/… please – Nagaraju K Oct 25 '19 at 14:03

you can inject in your block an instance of \Magento\Catalog\Model\CategoryFactory like this:

protected $categoryFactory;
public function __construct(
    \Magento\Catalog\Model\CategoryFactory $categoryFactory,
    $this->categoryFactory = $categoryFactory;

Then create this method in your block:

public function getCategory()
    $categoryId = $this->getCategoryId();
    $category = $this->categoryFactory->create()->load($categoryId);
    return $category;
public function getProductCollection()
     return $this->getCategory()->getProductCollection()->addAttributeToSelect('*'); 

Then you can use in the template this:

<?php foreach ($block->getProductCollection() as $product) : ?>
    <!-- do something with $product -->
<?php endforeach;?>

You should be able now to just add this to your homepage content

{{block class="Block\Class\Name\Here" category_id="5" template="path/to/template.phtml"}}
  • In implementing this solution i ran into the same problem posted about here: magento.stackexchange.com/questions/123374/… I'm adding this in so if others need further clarification on how to use this solution, they have one stop shopping. – circlesix Aug 11 '16 at 17:00

You need to replace getProductsCollection() by getProductCollection() (without s)


I am using this

echo '('.$subcat->getProductCollection()->count().')';

foreach ($subcats as $subcat) { 
    if ($subcat->getIsActive()) {
        $_category = $objectManager->create('Magento\Catalog\Model\Category')->load($subcat->getId());
        $_imgUrl = $_category->getImageUrl(); 
        $subcat_url = $subcat->getUrl();
        // echo $qty = $subcat->getQty(); exit;
        $subcat_img = $store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA) . 'catalog/category/' . $subcat->getImage(); 
        $placeholder_img = "pub/media/placeholder.png";
        if($_imgUrl ==''){
            $_imgUrl = $store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA)."catalog/category/placeholder.png";
        <div class="col-sm-2 item-two">
            <a href="<?php echo $subcat_url; ?>">
                <div class="item-two-img">
                    <img src="<?php echo $_imgUrl; ?>" class="img-responsive"/>
                <p><?php echo $subcat->getName(); 
                    $subcat->getProductCollection()->count(); ?>
                    <span class="pro_quantity">
                        <?php echo '('.$subcat->getProductCollection()->count().')';?>
  • Never use objectmanager in your code. especially not in in your phtmls – Kay Int Veen Sep 27 '19 at 13:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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