问题描述

我需要添加换行符到导航菜单项标题。我没有意识到这是一个问题,因为当我以超级管理员身份登录时,我可以添加<br/> 很好,但显然 regular-level 管理员不能。

我已经阅读了这篇文章 Custom Menus Description Stripping HTML Tags

但是我相信这些标签在保存/更新时被剥离,所以我不会立即看到 Custom Walker 是如何解决的,但是我的大脑今天很好,所以很明显。

wp_save_nav_menu_items()wp_update_nav_menu_item()也似乎没有任何卫生状况。

最佳解决方案

继 @Rarst 之后,关于安全角色的提示是我最终做的:

function wpa_105883_menu_title_markup( $title, $id ){
    if ( is_nav_menu_item ( $id ) && ! is_admin() ){
        $title = preg_replace( '/#BR#/', '<br/>', $title );
    }
    return $title;
}
add_filter( 'the_title', 'wpa_105883_menu_title_markup', 10, 2 );

编辑:也是每个 Rarst 的评论我已经用 str_ireplace 替换了 preg_replace

function wpa_105883_menu_title_markup( $title, $id ){
    if ( is_nav_menu_item ( $id ) ){
        $title = str_ireplace( "#BR#", "<br/>", $title );
    }
    return $title;
}
add_filter( 'the_title', 'wpa_105883_menu_title_markup', 10, 2 );

次佳解决方案

没有将卫生信息转换为内部或编码自定义界面… 我将为其指定一些安全字符 (例如管道|),并在输出上替换为 break 标签。

它通过 Walker 中的 the_title 过滤器,只需要及时添加和删除过滤器,因此它不会影响其他地方的标题。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。