{"id":972,"date":"2020-05-03T16:19:42","date_gmt":"2020-05-03T16:19:42","guid":{"rendered":"https:\/\/meetanshi.com\/blog\/2020\/05\/03\/add-category-column-to-product-grid-in-magento-2\/"},"modified":"2025-05-22T13:20:59","modified_gmt":"2025-05-22T07:50:59","slug":"add-category-column-to-product-grid-in-magento-2","status":"publish","type":"post","link":"https:\/\/meetanshi.com\/blog\/add-category-column-to-product-grid-in-magento-2\/","title":{"rendered":"How to Add Category Column to Product Grid in Magento 2"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Grids in Magento 2 are an easy way to list, sort, filter, edit, or update data. Earlier I posted the solution to&nbsp;<a href=\"https:\/\/meetanshi.com\/blog\/create-admin-grid-magento-2\/\" target=\"_blank\" rel=\"noreferrer noopener\">create admin grid in Magento 2<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And taking it a notch up here\u2019s the solution to&nbsp;<em><strong>add category column to product grid in Magento 2<\/strong><\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The default Magento 2 product grid allows adding columns of the product attribute. However, adding custom columns of category in the product grid in Magento 2 is not easy. You can also&nbsp;<a href=\"https:\/\/meetanshi.com\/blog\/how-to-add-action-column-in-admin-grid-in-magento-2\/\">add action column in Magento 2 admin grid<\/a>&nbsp;for enabling you to perform record specific actions such as deleting and editing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can use this solution to add category column which can be useful for better product management and optimized backend performance.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Method to Add Category Column to Product Grid in Magento 2:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Create&nbsp;<em><strong><em><strong>app\\code\\Vendor\\Extension\\etc\\di.xml<\/strong><\/em><\/strong><\/em><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?xml version=\"1.0\"?>\n\n&lt;config xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"urn:magento:framework:ObjectManager\/etc\/config.xsd\">\n    &lt;preference for=\"Magento\\Catalog\\Ui\\DataProvider\\Product\\ProductDataProvider\" type=\"Vendor\\Extension\\Ui\\DataProvider\\Product\\ProductDataProvider\" \/>\n&lt;\/config><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Create&nbsp;<em><strong><em><strong>app\\code\\Vendor\\Extension\\Model\\Category\\Categorylist.php<\/strong><\/em><\/strong><\/em><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?php\n\nnamespace Vendor\\Extension\\Model\\Category;\n\nclass CategoryList implements \\Magento\\Framework\\Option\\ArrayInterface\n{\n    public function __construct(\n        \\Magento\\Catalog\\Model\\ResourceModel\\Category\\CollectionFactory $collectionFactory\n    ) {\n        $this->_categoryCollectionFactory = $collectionFactory;\n\n    }\n    public function toOptionArray($addEmpty = true)\n    {\n\n         $collection = $this->_categoryCollectionFactory->create();\n        $collection->addAttributeToSelect('name');\/\/->addRootLevelFilter()->load();\n        $options = [];\n        if ($addEmpty) {\n            $options[] = ['label' => __('-- Please Select a Category --'), 'value' => ''];\n        }\n        foreach ($collection as $category) {\n            $options[] = ['label' => $category->getName(), 'value' => $category->getId()];\n        }\n        return $options;\n    }\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Create&nbsp;<em><strong><em><strong>app\\code\\Vendor\\Extension\\Ui\\Component\\Listing\\Column\\Category.php<\/strong><\/em><\/strong><\/em><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?php\n\nnamespace Vendor\\Extension\\Ui\\Component\\Listing\\Column;\n\nuse Magento\\Framework\\View\\Element\\UiComponentFactory;\nuse Magento\\Framework\\View\\Element\\UiComponent\\ContextInterface;\n\nclass Category extends \\Magento\\Ui\\Component\\Listing\\Columns\\Column\n{\n\n    public function prepareDataSource(array $dataSource)\n    {\n        $fieldName = $this->getData('name');\n        if (isset($dataSource['data']['items'])) {\n            foreach ($dataSource['data']['items'] as &amp; $item) {\n                $productId = $item['entity_id'];\n\n                $objectManager = \\Magento\\Framework\\App\\ObjectManager::getInstance();\n                $product = $objectManager->create('Magento\\Catalog\\Model\\Product')->load($productId);\n                $cats = $product->getCategoryIds();\n                $categories = array();\n                if (count($cats)) {\n                    foreach ($cats as $cat) {\n                        $category = $objectManager->create('Magento\\Catalog\\Model\\Category')->load($cat);\n                        $categories[] = $category->getName();\n                    }\n                }\n                $item[$fieldName] = implode(',', $categories);\n            }\n        }\n        return $dataSource;\n    }\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Create&nbsp;<em><strong><em><strong>app\\code\\Vendor\\Extension\\Ui\\DataProvider\\Product\\ProductDataProvider.php<\/strong><\/em><\/strong><\/em><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?php\n\nnamespace Vendor\\Extension\\Ui\\DataProvider\\Product;\n\nclass ProductDataProvider extends \\Magento\\Catalog\\Ui\\DataProvider\\Product\\ProductDataProvider\n{\n    public function addFilter(\\Magento\\Framework\\Api\\Filter $filter)\n    {\n        if ($filter->getField() == 'category_id') {\n            $this->getCollection()->addCategoriesFilter(array('in' => $filter->getValue()));\n        } elseif (isset($this->addFilterStrategies[$filter->getField()])) {\n            $this->addFilterStrategies[$filter->getField()]\n                ->addFilter(\n                    $this->getCollection(),\n                    $filter->getField(),\n                    [$filter->getConditionType() => $filter->getValue()]\n                );\n        } else {\n            parent::addFilter($filter);\n        }\n    }\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Create&nbsp;<em><strong><em><strong>app\\code\\Vendor\\Extension\\view\\adminhtml\\ui_component\\product_listing.xml<\/strong><\/em><\/strong><\/em><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?xml version=\"1.0\"?>\n&lt;listing xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"urn:magento:module:Magento_Ui:etc\/ui_configuration.xsd\">\n    &lt;columns name=\"product_columns\" class=\"Magento\\Catalog\\Ui\\Component\\Listing\\Columns\">\n        &lt;column name=\"category_id\" class=\"Vendor\\Extension\\Ui\\Component\\Listing\\Column\\Category\">\n            &lt;argument name=\"data\" xsi:type=\"array\">\n                &lt;item name=\"options\" xsi:type=\"object\">Vendor\\Extension\\Model\\Category\\Categorylist&lt;\/item>\n                &lt;item name=\"config\" xsi:type=\"array\">\n                    &lt;item name=\"filter\" xsi:type=\"string\">select&lt;\/item>\n                    &lt;item name=\"add_field\" xsi:type=\"boolean\">true&lt;\/item>\n                    &lt;item name=\"label\" xsi:type=\"string\" translate=\"true\">Categories&lt;\/item>\n                    &lt;item name=\"sortOrder\" xsi:type=\"number\">75&lt;\/item>\n                    &lt;item name=\"dataType\" xsi:type=\"string\">select&lt;\/item>\n                &lt;\/item>\n            &lt;\/argument>\n        &lt;\/column>\n        &lt;column name=\"created_at\" class=\"Magento\\Ui\\Component\\Listing\\Columns\\Date\">\n            &lt;argument name=\"data\" xsi:type=\"array\">\n                &lt;item name=\"config\" xsi:type=\"array\">\n                    &lt;item name=\"filter\" xsi:type=\"string\">dateRange&lt;\/item>\n                    &lt;item name=\"component\" xsi:type=\"string\">Magento_Ui\/js\/grid\/columns\/date&lt;\/item>\n                    &lt;item name=\"dataType\" xsi:type=\"string\">date&lt;\/item>\n                    &lt;item name=\"label\" xsi:type=\"string\" translate=\"true\">Created At&lt;\/item>\n                &lt;\/item>\n            &lt;\/argument>\n        &lt;\/column>\n        &lt;column name=\"updated_at\" class=\"Magento\\Ui\\Component\\Listing\\Columns\\Date\">\n            &lt;argument name=\"data\" xsi:type=\"array\">\n                &lt;item name=\"config\" xsi:type=\"array\">\n                    &lt;item name=\"filter\" xsi:type=\"string\">dateRange&lt;\/item>\n                    &lt;item name=\"component\" xsi:type=\"string\">Magento_Ui\/js\/grid\/columns\/date&lt;\/item>\n                    &lt;item name=\"dataType\" xsi:type=\"string\">date&lt;\/item>\n                    &lt;item name=\"label\" xsi:type=\"string\" translate=\"true\">Updated At&lt;\/item>\n                &lt;\/item>\n            &lt;\/argument>\n        &lt;\/column>\n    &lt;\/columns>\n&lt;\/listing><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That\u2019s it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you want to directly download this extension from Github, check&nbsp;<a href=\"https:\/\/github.com\/MeetanshiInc\/Add-Category-Column-to-Product-Grid-in-Magento-2\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Please share the solution with fellow developers via social media.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Thank you.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Also Read:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/meetanshi.com\/blog\/update-table-data-in-magento-2\/\" target=\"_blank\" rel=\"noreferrer noopener\">How to Update Table Data in Magento 2<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Grids in Magento 2 are an easy way to list, sort, filter, edit, or update data. Earlier I posted the solution to&nbsp;create admin grid in&#8230;<\/p>\n","protected":false},"author":13,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[34],"tags":[],"class_list":["post-972","post","type-post","status-publish","format-standard","hentry","category-magento"],"acf":[],"_links":{"self":[{"href":"https:\/\/meetanshi.com\/blog\/wp-json\/wp\/v2\/posts\/972","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/meetanshi.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/meetanshi.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/meetanshi.com\/blog\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/meetanshi.com\/blog\/wp-json\/wp\/v2\/comments?post=972"}],"version-history":[{"count":4,"href":"https:\/\/meetanshi.com\/blog\/wp-json\/wp\/v2\/posts\/972\/revisions"}],"predecessor-version":[{"id":14935,"href":"https:\/\/meetanshi.com\/blog\/wp-json\/wp\/v2\/posts\/972\/revisions\/14935"}],"wp:attachment":[{"href":"https:\/\/meetanshi.com\/blog\/wp-json\/wp\/v2\/media?parent=972"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/meetanshi.com\/blog\/wp-json\/wp\/v2\/categories?post=972"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/meetanshi.com\/blog\/wp-json\/wp\/v2\/tags?post=972"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}