如何让WordPress自定义文章类型标题解析HTML代码(以上标注册商标®为例)
如何让WordPress自定义文章类型标题解析HTML代码(以上标注册商标®为例)
我完全懂你碰到的麻烦——直接在自定义文章类型(CPT)的标题里加<sup>这类HTML标签,结果标签被原样输出成文字,根本不解析。你之前写的函数只解决了单产品页面的问题,归档列表页还是老样子,确实头疼。咱们来一步步搞定它:
先搞清楚问题根源
你原来的函数里,在非单页场景下用了wp_strip_all_tags(),这就导致归档页的标题HTML标签被直接剥离了。而且WordPress默认会对标题进行HTML转义,防止安全问题,但咱们的场景下需要让特定页面允许解析标签。
解决方案一:修改现有函数,覆盖归档页场景
把你原来的函数替换成下面这个,它会同时处理单产品页和CPT归档页的标题:
function add_superscript_to_trademarks_in_titles( $title ) { // 替换成你实际的自定义文章类型slug(比如CPT UI里设置的名称) $target_cpt = 'product'; // 检查是否在目标CPT的单页或归档页 if ( is_singular($target_cpt) || is_post_type_archive($target_cpt) ) { // 把商标符号(实体或原生符号)替换成带<sup>的HTML $title = str_replace( array( '®', '®' ), '<sup>®</sup>', $title ); // 直接返回处理后的标题,不剥离HTML return $title; } else { // 其他页面保持默认,剥离所有HTML标签 return wp_strip_all_tags($title); } } add_filter( 'the_title', 'add_superscript_to_trademarks_in_titles' );
- 核心改动:把判断条件从仅单页,改成了单页 + 目标CPT归档页,这样归档页的标题也会保留HTML标签并解析。
- 注意:一定要把
$target_cpt的值改成你自己的自定义文章类型slug(比如在CPT UI插件里设置的那个标识)。
解决方案二:处理标题属性的额外转义问题
如果你的归档页用了Beaver Builder的模块,或者主题在输出标题时用到了the_title_attribute钩子(比如链接的title属性),这个钩子默认会转义HTML,可能导致鼠标悬停时看到<sup>标签。这时候再加上下面这个函数:
function allow_html_in_cpt_archive_title_attr( $title, $post_id ) { $target_cpt = 'product'; $post = get_post($post_id); // 确认是目标CPT,且在归档页 if ( $post->post_type === $target_cpt && is_post_type_archive($target_cpt) ) { // 替换商标并返回未转义的HTML return str_replace( array( '®', '®' ), '<sup>®</sup>', $title ); } // 其他场景保持默认的转义处理 return esc_attr($title); } add_filter( 'the_title_attribute', 'allow_html_in_cpt_archive_title_attr', 10, 2 );
额外注意事项
- 不要直接在标题编辑器里写
<sup>®</sup>,只需要输入®或者®就行,函数会自动帮你替换成上标格式。 - 修改完函数后,记得清除WordPress的缓存(包括主题/插件缓存),不然可能看不到效果。
- 如果用Beaver Builder搭建归档页,检查一下你用的标题模块是否支持解析HTML,有些模块可能有自定义设置,需要开启允许HTML的选项。
这样调整后,不管是单产品详情页还是归档列表页,注册商标都会自动变成上标,其他页面也不会出现HTML代码乱显示的问题啦。
内容来源于stack exchange
相关产品推荐
相关产品推荐

