You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Magento 2.4:如何基于自定义属性排除产品网格小部件中的商品?

Magento 2.4 产品网格小部件按自定义属性排除商品的实现方法

方法一:后台可视化配置(无需开发)

如果仅针对单个产品网格小部件做排除,直接通过后台配置即可完成:

  • 登录后台,进入内容 > 元素 > 小部件,新建或编辑目标产品网格小部件
  • 切换到条件标签页,点击「添加条件」按钮
  • 在条件选择器中找到你的自定义属性(比如exclude_from_grid),设置过滤规则:比如选择「不等于」,并填入要排除的属性值(比如Yes)
  • 保存小部件,执行缓存刷新操作,前端即可生效

方法二:自定义插件实现全局/复杂逻辑排除

如果需要全局生效,或者过滤逻辑比较复杂(比如多属性组合、动态值判断),可以通过开发插件修改产品集合:

  1. 配置插件依赖:在你的模块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>
  1. 编写插件类:创建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;
    }
}
  1. 生效配置:执行以下命令刷新系统配置和缓存:
php bin/magento setup:di:compile
php bin/magento cache:flush

注意事项

  • 确保你的自定义属性已开启「在产品列表中可见」(属性编辑页的「商店属性」标签下设置),否则无法在集合中被过滤
  • 多商店模式下,需确认属性值在对应商店视图下的设置正确
  • 后台配置方式灵活度高,适合单个小部件;插件方式适合全局统一规则的场景

内容的提问来源于stack exchange,提问作者nickcobb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 02:45:11