Magento 2.4:如何基于自定义属性排除产品网格小部件中的商品?
Magento 2.4 产品网格小部件按自定义属性排除商品的实现方法
方法一:后台可视化配置(无需开发)
如果仅针对单个产品网格小部件做排除,直接通过后台配置即可完成:
- 登录后台,进入内容 > 元素 > 小部件,新建或编辑目标产品网格小部件
- 切换到条件标签页,点击「添加条件」按钮
- 在条件选择器中找到你的自定义属性(比如
exclude_from_grid),设置过滤规则:比如选择「不等于」,并填入要排除的属性值(比如Yes) - 保存小部件,执行缓存刷新操作,前端即可生效
方法二:自定义插件实现全局/复杂逻辑排除
如果需要全局生效,或者过滤逻辑比较复杂(比如多属性组合、动态值判断),可以通过开发插件修改产品集合:
- 配置插件依赖:在你的模块
etc/di.xml中添加以下配置:
<?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\CatalogWidget\Block\Product\ProductsList"> <plugin name="custom_exclude_products_from_grid" type="Vendor\Module\Plugin\ProductsListPlugin" /> </type> </config>
- 编写插件类:创建
Vendor/Module/Plugin/ProductsListPlugin.php文件,实现集合过滤逻辑:
<?php namespace Vendor\Module\Plugin; use Magento\CatalogWidget\Block\Product\ProductsList; class ProductsListPlugin { public function afterGetProductCollection(ProductsList $subject, $collection) { // 替换为你的自定义属性编码和要排除的属性值 $targetAttribute = 'exclude_from_grid'; $excludeValue = '1'; $collection->addAttributeToFilter( $targetAttribute, ['neq' => $excludeValue] ); return $collection; } }
- 生效配置:执行以下命令刷新系统配置和缓存:
php bin/magento setup:di:compile php bin/magento cache:flush
注意事项
- 确保你的自定义属性已开启「在产品列表中可见」(属性编辑页的「商店属性」标签下设置),否则无法在集合中被过滤
- 多商店模式下,需确认属性值在对应商店视图下的设置正确
- 后台配置方式灵活度高,适合单个小部件;插件方式适合全局统一规则的场景
内容的提问来源于stack exchange,提问作者nickcobb
相关产品推荐
相关产品推荐

