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

如何在Magento 2中按价格、颜色、制造商属性程序化筛选商品及分类商品

嘿,针对你的两个Magento 2商品筛选需求,我来给你一步步拆解解决方案,都是实战中常用的方法:

一、编程方式按price、color、manufacturer筛选商品

如果是要在自定义模块里通过代码获取符合条件的商品集合,我们可以借助Magento的产品集合工厂来实现,直接上可复用的代码示例:

<?php
namespace Your\CustomModule\Model;

use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
use Magento\Catalog\Model\Product\Attribute\Source\Status;
use Magento\Catalog\Model\Product\Visibility;

class FilteredProductLoader
{
    protected $productCollectionFactory;

    // 通过依赖注入获取集合工厂实例
    public function __construct(CollectionFactory $productCollectionFactory)
    {
        $this->productCollectionFactory = $productCollectionFactory;
    }

    public function getMatchingProducts()
    {
        // 初始化产品集合
        $productCollection = $this->productCollectionFactory->create();
        
        // 基础配置:只加载启用且前端可见的商品
        $productCollection->addAttributeToSelect('*')
                          ->addAttributeToFilter('status', ['eq' => Status::STATUS_ENABLED])
                          ->setVisibility([Visibility::VISIBILITY_BOTH, Visibility::VISIBILITY_IN_CATALOG]);

        // 1. 价格筛选:示例筛选100-500元区间的商品
        $productCollection->addAttributeToFilter('price', ['gteq' => 100, 'lteq' => 500]);

        // 2. 颜色筛选:注意这里要填颜色属性的Option ID(比如红色的ID是5)
        // 不知道Option ID的话,可以通过属性仓库获取:$colorAttr = $this->attrRepo->get('color'); 再遍历选项
        $productCollection->addAttributeToFilter('color', ['eq' => 5]);

        // 3. 制造商筛选:同样填制造商属性的Option ID(比如Apple的ID是3)
        $productCollection->addAttributeToFilter('manufacturer', ['eq' => 3]);

        // 加载集合并返回
        $productCollection->load();
        return $productCollection;
    }
}

补充说明:

  • 如果需要筛选多个颜色/制造商,把条件改成['in' => [5,6,7]]即可
  • 价格支持单一条件,比如['gt' => 200](大于200元)或['lt' => 1000](小于1000元)
  • 记得在模块的di.xml里配置依赖注入,或者直接在控制器/Block里注入CollectionFactory
二、商品分类页面按颜色、制造商、价格筛选(层导航配置)

这个需求用Magento默认的层导航功能就能实现,不需要写太多代码,主要是后台配置:

  1. 设置属性为可筛选

    • 登录后台,进入Stores > Attributes > Product
    • 分别找到color、manufacturer、price三个属性:
      • 编辑属性时,切换到Storefront Properties标签,把Use in Layered Navigation设为Filterable (with results),Use in Search Results Layered Navigation也可以设为Yes
      • 价格属性默认已支持筛选,你可以额外配置Price Step Configuration来调整价格区间的步长
  2. 开启分类的锚点属性

    • 进入Catalog > Categories,找到需要添加筛选的分类
    • 在Display Settings标签下,把Anchor设为Yes(只有锚点分类才会显示层导航筛选)
    • 保存分类设置
  3. 验证效果

    • 清理后台缓存(System > Cache Management)
    • 前端访问该分类页面,左侧就会出现颜色、制造商、价格的筛选栏了

如果需要自定义筛选的样式或逻辑(比如修改价格区间计算),可以重写Magento\Catalog\Model\Layer\Filter\Price类,但大部分基础需求默认配置就能满足。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:17:17