Hello Friends!!!
In this blog, we will learn how we can add a custom attribute or custom column filter to the product collection.
Here, we will create an around plugin for the addAttributeToSelect method of Magento\Catalog\Model\ResourceModel\Product\Collection class.
In this plugin, we will add a filter of the custom column or custom attribute to the product collection. To proceed with this, please follow the below steps:
Step1. Create di.xml file inside the app/code/Vendor/Module/etc/ directory.
<?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\Model\ResourceModel\Product\Collection">
<plugin name="Vendor_Module::aroundProductCollection" type="Vendor\Module\Plugin\Product" sortOrder="1"/>
</type>
</config>
Step2. Create Product.php file inside the app/code/Vendor/Module/Plugin/ directory.
<?php
namespace Vendor\Module\Plugin;
class Product
{
/**
* @var Magento\Framework\App\State
*/
protected $appState;
/**
* Initialize dependencies
*
* @param \Magento\Framework\App\State $appState
*/
public function __construct(
\Magento\Framework\App\State $appState
) {
$this->appState = $appState;
}
/**
* Around plugin of addAttributeToSelect function
*
* @param \Magento\Catalog\Model\ResourceModel\Product\Collection $subject
* @param \Closure $proceed
* @param string $attribute
* @param boolean $joinType
* @return void
*/
public function aroundAddAttributeToSelect(
\Magento\Catalog\Model\ResourceModel\Product\Collection $subject,
\Closure $proceed,
$attribute,
$joinType = false
) {
$appState = $this->appState;
$skutoHideProduct = "test";
$result = $proceed($attribute, $joinType = false);
$code = \Magento\Backend\App\Area\FrontNameResolver::AREA_CODE;
if ($appState->getAreaCode() == $code) {
//add filter to hide test sku's product at frontend and admin's product grid collection
$result->addFieldToFilter('sku', ['neq' => $skutoHideProduct]);
}
//add custom column/attribute filter in collection
$result->addFieldToFilter('custom_column', ['eq' => 'value']);
return $result;
}
}
Now, see the result at the frontend and admin end in product grid collection.
Hope this will be helpful.
Thanks 🙂

Be the first to comment.