WordPress菜单项特殊字符&转义异常问题求助
解决WordPress菜单项&符号被自动转义为&的问题
我来帮你搞定这个头疼的符号转义问题!这种情况大概率和你用的Roots/Sage 10主题有关,不过咱们一步步排查解决:
先确认问题根源
WordPress本身默认是支持在菜单项里直接使用&符号的——后台输入Call & Contact,数据库里会存为Call & Contact,但前台输出时会自动解码回&。但Sage 10因为用了Blade模板引擎,默认会开启HTML自动转义,这就是导致你看到&而不是&的核心原因。
解决方案分这几步来
1. 后台直接输入原始&符号
先检查你是不是在后台菜单项里输入了&?如果是,直接改成输入&试试——WordPress后台会自动处理编码,正常情况下前台应该能正确显示。
2. 修改Sage 10的菜单渲染模板
如果后台输入的是&但前台还是显示&,那肯定是Blade模板的转义在搞鬼。找到Sage主题里渲染菜单的Blade文件(一般在resources/views/navigation/目录下,比如primary.blade.php),把原来的:
{{ $item->title }}
改成:
{!! $item->title !!}
{{ }}是Blade的自动转义输出,{!! !!}会跳过转义,直接输出原始HTML内容,这样就能正确显示&了。
3. 用WordPress过滤器全局处理
如果你不想修改模板文件,可以在主题的functions.php或者自定义插件里添加这段代码,强制解码菜单项标题:
add_filter('nav_menu_item_title', function($title, $item, $args, $depth) { // 把HTML实体解码为原始字符 return html_entity_decode($title); }, 10, 4);
这个过滤器会在菜单项标题输出前,把&解码回&。
4. 排查插件干扰
偶尔SEO插件、安全插件也会强制转义菜单项内容,你可以暂时禁用所有第三方插件,测试菜单显示是否正常,排查出是哪个插件导致的问题。
内容的提问来源于stack exchange,提问作者Ben Smallwood
相关产品推荐
相关产品推荐

