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

Magento 2:如何将自定义属性值作为菜单项标签显示?

Magento 2 主菜单显示分类自定义菜单标题属性而非分类标题

前提确认

先确保你创建的自定义属性(比如属性代码为menu_title)已正确配置:

  • 在后台属性设置的「Storefront Properties」中,勾选「Used in Navigation Menu」(若有该选项)
  • 确保属性已分配到对应属性集,且目标分类已填写该属性的值

步骤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\Catalog\Model\ResourceModel\Category\Collection">
        <plugin name="add_menu_title_to_category_collection" type="Vendor\CustomMenu\Plugin\CategoryCollectionPlugin" />
    </type>
</config>

然后创建插件类Vendor\CustomMenu\Plugin\CategoryCollectionPlugin.php:

<?php
namespace Vendor\CustomMenu\Plugin;

class CategoryCollectionPlugin
{
    public function beforeLoad(\Magento\Catalog\Model\ResourceModel\Category\Collection $subject)
    {
        // 将自定义属性加入集合查询
        $subject->addAttributeToSelect('menu_title');
        return null;
    }
}

步骤2:修改主题菜单模板文件

找到当前主题的topmenu.phtml模板,路径通常为app/design/frontend/[主题厂商]/[主题名]/Magento_Theme/templates/html/topmenu.phtml

找到输出菜单名称的代码段(一般是$child->getName()相关),替换为以下代码:

<?php
// 获取菜单绑定的分类对象
$category = $child->getData('category');
// 优先使用自定义菜单标题,为空则 fallback 到原分类名称
$displayTitle = $category && $category->getMenuTitle() ? $category->getMenuTitle() : $child->getName();
?>
<?= $block->escapeHtml($displayTitle) ?>

步骤3:清理缓存

执行以下命令清除缓存,确保修改生效:

php bin/magento cache:clean
php bin/magento cache:flush

补充说明

  • 若使用第三方主题,菜单模板路径可能不同,可通过主题文件结构查找topmenu.phtml
  • 不想创建模块的话,也可通过事件观察者加载属性,但插件方式更高效可控

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:50:25