Today, we’re going to teach you guys how to add a custom filter to the product grid in a Magento 2 store.
The grid filter in Magento 2 is useful when you have a massive product catalog as it’s difficult to manage all products efficiently and find the required product quickly.
And in this post, we’re going to show you exactly how to add a custom filter to the product grid in your Magento 2 store.
How to Add a Custom Filter to the Product Grid in Magento 2
Please follow the below steps to learn how to add a custom filter to the product grid in the Magento 2 store.
Step 1. First of all, you need to create a registration.php file in the app/code/Magedelight/Testgrid/ folder & paste the following code to add Magento 2 admin grid custom filter.
<?php \Magento\Framework\Component\ComponentRegistrar::register( Â Â Â Â \Magento\Framework\Component\ComponentRegistrar::MODULE, Â Â Â Â 'Magedelight_Testgrid', Â Â Â Â __DIR__ );
Step 2. After that, you need to create a module.xml file in the app/code/Magedelight/Testgrid/etc/ folder & paste the following code for adding the custom filter to the grid.
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"Â xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> Â Â Â Â <module name="Magedelight_Testgrid" setup_version="1.0.0"> Â Â Â Â </module> </config>
Step 3. Next, you need to initialize the column in the UI Component by creating a product_listing.xml file in the app/code/Magedelight/Testgrid/view/adminhtml/ui_component/ folder & paste the following code.
<?xml version="1.0" encoding="UTF-8"?> <listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"Â xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd"> Â Â Â Â <columns name="product_columns" class="Magento\Catalog\Ui\Component\Listing\Columns"> Â Â Â Â Â Â Â Â <column name="yearly_views" sortOrder="100"> Â Â Â Â Â Â Â Â Â Â Â Â <settings> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â <addField>true</addField> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â <filter>textRange</filter> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â <label translate="true">Yearly views</label> Â Â Â Â Â Â Â Â Â Â Â Â </settings> Â Â Â Â Â Â Â Â </column> Â Â Â Â </columns> </listing>
Also read: How to Remove Decimals from Quantity in Product Grid in Magento 2?
Step 4. Now, you need to create an AddYearlyViewsFieldToCollection.php file in the app/code/Magedelight/Testgrid/Ui/DataProvider/Product/ folder & paste the following code to set up a column for the product grid.
<?php
namespace Magedelight\Testgrid\Ui\DataProvider\Product;
use Magento\Framework\Data\Collection;
use Magento\Ui\DataProvider\AddFieldToCollectionInterface;
class AddYearlyViewsFieldToCollection implements AddFieldToCollectionInterface
{
    public function addField(Collection $collection, $field, $alias = null)
    {
        $collection->joinField(
            'yearly_views',
            'report_viewed_product_aggregated_yearly',
            'views_num',
            'product_id=entity_id',
            null,
            'left'
        );
    }
}
Step 5. After that, create an AddYearlyViewsFilterToGrid.php file in the app/code/Magedelight/Testgrid/Ui/DataProvider/Product/ folder & paste the following code to set up a custom filter in the Magento 2 admin grid.
<?php
namespace Magedelight\Testgrid\Ui\DataProvider\Product;
use Magento\Catalog\Api\Data\ProductInterface;
use Magento\Framework\Data\Collection;
use Magento\Ui\DataProvider\AddFilterToCollectionInterface;
class AddYearlyViewsFilterToGrid implements AddFilterToCollectionInterface
{
    public function addFilter(Collection $collection, $field, $condition = null)
    {
        if (isset($condition['gteq'])) {
            $collection->addFieldToFilter([[
                'attribute' => 'yearly_views', 'gteq' => $condition['gteq']]
            ]);
        }
        if (isset($condition['lteq'])) {
            $collection->addFieldToFilter([[
                'attribute' => 'yearly_views', 'lteq' => $condition['lteq']]
            ]);
        }
    }
}
Step 6. Lastly, you need to create a di.xml file in the app/code/Magedelight/Testgrid/etc/adminhtml/ folder & paste the following code to add functions addFilterStrategies.
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">     <type name="Magento\Catalog\Ui\DataProvider\Product\ProductDataProvider">         <arguments>             <argument name="addFieldStrategies" xsi:type="array">                 <item name="yearly_views" xsi:type="object">                   Magedelight\Testgrid\Ui\DataProvider\Product\AddYearlyViewsFieldToCollection                 </item>             </argument>             <argument name="addFilterStrategies" xsi:type="array">                 <item name="yearly_views" xsi:type="object">                   Magedelight\Testgrid\Ui\DataProvider\Product\AddYearlyViewsFilterToGrid                 </item>             </argument>         </arguments>     </type> </config>
Also read: How to Create a Downloadable Product in Magento 2 Programmatically?
Conclusion
And that’s all!
This is the best way to add a custom filter to the product grid in Magento 2 store.
And if you need our professional assistance, feel free to contact us anytime.



