{"id":7255,"date":"2019-09-23T10:22:04","date_gmt":"2019-09-23T04:52:04","guid":{"rendered":"https:\/\/www.hiddentechies.com\/blog\/?p=7255"},"modified":"2020-01-10T10:36:25","modified_gmt":"2020-01-10T05:06:25","slug":"magento-2-get-product-collection-by-category","status":"publish","type":"post","link":"https:\/\/www.hiddentechies.com\/blog\/magento-2\/magento-2-get-product-collection-by-category\/","title":{"rendered":"Magento 2 &#8211; How to Get Product Collection by Category"},"content":{"rendered":"<p>In this post I am going to explain how to get product collection by category in magento 2.<\/p>\n<p><strong>1. Using Dependency Injection<\/strong><\/p>\n<p>Add below code snippet in Block class.<\/p>\n<pre class=\"lang:default decode:true \">protected $_categoryFactory;\r\nprotected $_productCollectionFactory;\r\n\t\r\npublic function __construct(\r\n\t\\Magento\\Backend\\Block\\Template\\Context $context,        \r\n\t\\Magento\\Catalog\\Model\\CategoryFactory $categoryFactory,\r\n\t\\Magento\\Catalog\\Model\\ResourceModel\\Product\\CollectionFactory $productCollectionFactory,\r\n\tarray $data = []\r\n)\r\n{    \r\n\t$this-&gt;_categoryFactory = $categoryFactory;\r\n\t$this-&gt;_productCollectionFactory = $productCollectionFactory;\r\n\tparent::__construct($context, $data);\r\n}\r\n\r\n\/* Get category object *\/\r\npublic function getCategory($categoryId)\r\n{\r\n\t$category = $this-&gt;_categoryFactory-&gt;create();\r\n\t$category-&gt;load($categoryId);\r\n\treturn $category;\r\n}\r\n\r\n\/* Product collection by category id *\/\r\npublic function getCategoryProductCollection($categoryId)\r\n{\r\n\t$productCollection = $this-&gt;getCategory($categoryId)-&gt;getProductCollection();\r\n\t$productCollection-&gt;addAttributeToSelect('*');\r\n\t$productCollection-&gt;addAttributeToFilter('visibility', \\Magento\\Catalog\\Model\\Product\\Visibility::VISIBILITY_BOTH);\r\n\t$productCollection-&gt;addAttributeToFilter('status',\\Magento\\Catalog\\Model\\Product\\Attribute\\Source\\Status::STATUS_ENABLED);\r\n\treturn $productCollection;\r\n}\r\n\r\n\/* Filtering a product collection by multiple category ids *\/\r\npublic function getProductCollectionByCategories($categoryIds) {\r\n\t$productCollection = array();\r\n\tif ($categoryIds &amp;&amp; count($categoryIds) &gt; 0) {\r\n\t\t$productCollection = $this-&gt;_productCollectionFactory-&gt;create();\r\n\t\t$productCollection-&gt;addAttributeToSelect('*');\r\n\t\t$productCollection-&gt;addCategoriesFilter(['in' =&gt; $categoryIds]);\r\n\t\t$productCollection-&gt;addAttributeToFilter('visibility', \\Magento\\Catalog\\Model\\Product\\Visibility::VISIBILITY_BOTH);\r\n\t\t$productCollection-&gt;addAttributeToFilter('status', \\Magento\\Catalog\\Model\\Product\\Attribute\\Source\\Status::STATUS_ENABLED);\r\n\t}\r\n\treturn $productCollection;\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p>Add below code snippet in template file.<\/p>\n<pre class=\"lang:default decode:true \">$categoryId = 3;\r\n\r\n$categoryProductCollection = $block-&gt;getCategoryProductCollection($categoryId);\r\n\r\necho \"&lt;pre&gt;\";\r\nprint_r($categoryProductCollection-&gt;getData());\r\necho \"&lt;\/pre&gt;\";\r\n\r\nif ($categoryProductCollection &amp;&amp; count($categoryProductCollection) &gt; 0) {\r\n    foreach ($categoryProductCollection as $product) {\r\n        echo $product-&gt;getId() . \"&lt;br \/&gt;\";\r\n        echo $product-&gt;getName() . \"&lt;br \/&gt;\";\r\n        echo $product-&gt;getProductUrl() . \"&lt;br \/&gt;\";\r\n    }\r\n}\r\n\r\n\/\/Category ids array\r\n$categoryIds = [7, 8, 9];\r\n\r\n$productCollectionByCategories = $block-&gt;getProductCollectionByCategories($categoryIds);\r\n\r\necho \"&lt;pre&gt;\";\r\nprint_r($productCollectionByCategories-&gt;getData());\r\necho \"&lt;\/pre&gt;\";\r\n\r\nif ($productCollectionByCategories &amp;&amp; count($productCollectionByCategories) &gt; 0) {\r\n    foreach ($productCollectionByCategories as $product) {\r\n        echo $product-&gt;getId() . \"&lt;br \/&gt;\";\r\n        echo $product-&gt;getName() . \"&lt;br \/&gt;\";\r\n        echo $product-&gt;getProductUrl() . \"&lt;br \/&gt;\";\r\n    }\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>2. Using Object Manager<\/strong><\/p>\n<pre class=\"lang:default decode:true \">$objectManager = \\Magento\\Framework\\App\\ObjectManager::getInstance();\r\n\r\n$categoryId = 3;\r\n\r\n$categoryFactory = $objectManager-&gt;get('\\Magento\\Catalog\\Model\\CategoryFactory');\r\n\r\n\/\/ Get category object\r\n$category = $categoryFactory-&gt;create()-&gt;load($categoryId);\r\n\r\n\/\/ Product collection by category id\r\n$categoryProductCollection = $category-&gt;getProductCollection();\r\n$categoryProductCollection-&gt;addAttributeToSelect('*');\r\n$categoryProductCollection-&gt;addAttributeToFilter('visibility', \\Magento\\Catalog\\Model\\Product\\Visibility::VISIBILITY_BOTH);\r\n$categoryProductCollection-&gt;addAttributeToFilter('status', \\Magento\\Catalog\\Model\\Product\\Attribute\\Source\\Status::STATUS_ENABLED);\r\n\r\necho \"&lt;pre&gt;\";\r\nprint_r($categoryProductCollection-&gt;getData());\r\necho \"&lt;\/pre&gt;\";\r\n\r\nif ($categoryProductCollection &amp;&amp; count($categoryProductCollection) &gt; 0) {\r\n    foreach ($categoryProductCollection as $product) {\r\n        echo $product-&gt;getId() . \"&lt;br \/&gt;\";\r\n        echo $product-&gt;getName() . \"&lt;br \/&gt;\";\r\n        echo $product-&gt;getProductUrl() . \"&lt;br \/&gt;\";\r\n    }\r\n}\r\n\r\n\r\n$productCollectionFactory = $objectManager-&gt;get('\\Magento\\Catalog\\Model\\ResourceModel\\Product\\CollectionFactory');\r\n\r\n\/\/Category ids array\r\n$categoryIds = [7, 8, 9];\r\n\r\n\/\/ Filtering a product collection by multiple category ids\r\n$productCollectionByCategories = $productCollectionFactory-&gt;create();\r\n$productCollectionByCategories-&gt;addAttributeToSelect('*');\r\n$productCollectionByCategories-&gt;addCategoriesFilter(['in' =&gt; $categoryIds]);\r\n$productCollectionByCategories-&gt;addAttributeToFilter('visibility', \\Magento\\Catalog\\Model\\Product\\Visibility::VISIBILITY_BOTH);\r\n$productCollectionByCategories-&gt;addAttributeToFilter('status', \\Magento\\Catalog\\Model\\Product\\Attribute\\Source\\Status::STATUS_ENABLED);\r\n\r\necho \"&lt;pre&gt;\";\r\nprint_r($productCollectionByCategories-&gt;getData());\r\necho \"&lt;\/pre&gt;\";\r\n\r\nif ($productCollectionByCategories &amp;&amp; count($productCollectionByCategories) &gt; 0) {\r\n    foreach ($productCollectionByCategories as $product) {\r\n        echo $product-&gt;getId() . \"&lt;br \/&gt;\";\r\n        echo $product-&gt;getName() . \"&lt;br \/&gt;\";\r\n        echo $product-&gt;getProductUrl() . \"&lt;br \/&gt;\";\r\n    }\r\n}<\/pre>\n<p>Thats it. Enjoy Magento 2!!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this post I am going to explain how to get product collection by category in magento 2. 1. Using Dependency Injection Add below code snippet in Block class. protected $_categoryFactory; protected $_productCollectionFactory; public function __construct( \\Magento\\Backend\\Block\\Template\\Context $context, \\Magento\\Catalog\\Model\\CategoryFactory $categoryFactory, \\Magento\\Catalog\\Model\\ResourceModel\\Product\\CollectionFactory $productCollectionFactory, array $data = [] ) { $this-&gt;_categoryFactory = $categoryFactory; $this-&gt;_productCollectionFactory = $productCollectionFactory; parent::__construct($context,&#8230; <\/p>\n<div class=\"actions\"><a href=\"https:\/\/www.hiddentechies.com\/blog\/magento-2\/magento-2-get-product-collection-by-category\/\">Continue Reading<\/a><\/div>\n","protected":false},"author":1,"featured_media":9824,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[59],"tags":[9,10,27],"_links":{"self":[{"href":"https:\/\/www.hiddentechies.com\/blog\/wp-json\/wp\/v2\/posts\/7255"}],"collection":[{"href":"https:\/\/www.hiddentechies.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hiddentechies.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hiddentechies.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hiddentechies.com\/blog\/wp-json\/wp\/v2\/comments?post=7255"}],"version-history":[{"count":2,"href":"https:\/\/www.hiddentechies.com\/blog\/wp-json\/wp\/v2\/posts\/7255\/revisions"}],"predecessor-version":[{"id":9822,"href":"https:\/\/www.hiddentechies.com\/blog\/wp-json\/wp\/v2\/posts\/7255\/revisions\/9822"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hiddentechies.com\/blog\/wp-json\/wp\/v2\/media\/9824"}],"wp:attachment":[{"href":"https:\/\/www.hiddentechies.com\/blog\/wp-json\/wp\/v2\/media?parent=7255"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hiddentechies.com\/blog\/wp-json\/wp\/v2\/categories?post=7255"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hiddentechies.com\/blog\/wp-json\/wp\/v2\/tags?post=7255"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}