有些站只卖很少几个产品,商品对比和Wishlist基本用不上。最容易想到的做法是直接禁用 Magento_Catalog 或 Magento_Wishlist,但前者根本不能动,后者也可能被主题、客户中心或第三方模块依赖。我的处理原则是:业务只是“不显示”,就只处理前台入口,不把整个模块从系统里拔掉。

先把页面上的入口找全,别只删右侧栏

商品对比不只出现在一个位置。分类列表、搜索结果、商品详情、顶部链接和 compare sidebar 都可能有入口;Wishlist 还会出现在客户中心、商品卡片和详情页。先在当前主题及父主题里查 block 名称:

rg 'catalog\.compare|product\.compare|wishlist' app/design/frontend vendor/magento/module-*/view/frontend/layout

这里不要直接改 vendor。搜索的目的只是确认当前 Magento 版本使用了哪些 block 名,真正的覆盖文件放到自定义主题。

只是隐藏功能时,用layout remove掉对应block

例如在主题的 Magento_Catalog/layout/default.xml 中处理公共区域:

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="catalog.compare.sidebar" remove="true"/>
        <referenceBlock name="catalog.compare.link" remove="true"/>
        <referenceBlock name="wishlist_sidebar" remove="true"/>
    </body>
</page>

商品卡片里的“加入对比”和“加入愿望单”不一定都是独立 block。有的主题在模板或 UI component 中直接输出按钮,所以公共 layout 清完之后还要检查分类页、搜索页和商品详情页。自定义主题如果继承了第三方主题,也要以实际渲染出来的 layout handle 为准,不能照抄一组 block 名就认为结束了。

不要用CSS把按钮盖住

display:none 只能让用户看不见,HTML、初始化脚本以及相关接口仍然存在。后续换主题、做无障碍检查或让搜索引擎抓页面时,很容易再次暴露。能在 layout 阶段移除就不要用 CSS;模板中直接输出的入口,则在自定义主题内覆盖最小模板片段。

清完缓存后按游客和登录用户各走一遍

php bin/magento cache:clean layout block_html full_page

然后至少检查首页、分类页、搜索页、商品详情、客户中心和购物车。浏览器里再搜一次 compare、wishlist,确认没有遗留链接和 JS 报错。这样做保留了模块依赖关系,只收掉用户入口,后面换主题或恢复功能也容易回滚。