默认情况下,WordPress 会将title
标题中的 破折号 -
和 &
等特殊符号进行转义,比如 -
转义为 –
,&
转义为 &
。某些SEO人员说这个会引发SEO方面的问题,其实这个说法没有任何依据。但是,如果你真的很在乎这个所谓的问题,可以根据本文的教程解决。

WordPress 为什么要转义特殊字符
一句话,为了安全。通过转义,可以避免某些情况下的恶意代码输出。当然,这种情况极少出现(我们也不知道如何恶意)。转义的代码结果在我们看来是不会对SEO产生不利影响的,否则WordPress官方开发团队也不会这样做。
不推荐的或无效的处理方法
不推荐的方法
网络上给出的解决方法大多数是直接全局禁用 wptexturize
功能,这种做法是不推荐的!!因为在其他的一些场景中,通过转义增强安全性还是很有必要的。
add_filter('run_wptexturize', '__return_false');
失效的方法
似乎从 WordPress 4.4 开始,WordPress 就建议采用 add_theme_support( 'title-tag' );
启用 document title 来输出标题,不再使用 wp_title()
函数直接输出标题。
所以,以下方法在现在的大部分主题中应该都不再生效了,除非你用的主题是老古董。
remove_filter('the_title', 'wptexturize');
remove_filter('wp_title', 'wptexturize');
remove_filter('single_post_title', 'wptexturize');
正确的禁止 title 转义的方法
现代 WordPress 主题基本采用 add_theme_support( 'title-tag' );
启用 document title 来输出标题,在标题的输出函数 wp_get_document_title()
的最末端有一个过滤钩子 document_title
,我们需要做的就是通过它来将转义后的内容反转义为正常输出,该方法不需要全局禁用 wptexturize
,所做的影响仅限于标题输出。
完整的代码如下:
/**
* 禁止 WordPress 转义 title 标题中的破折号 - 和 & 号等特殊符号
* https://www.wpdaxue.com/disable-title-wptexturize.html
*/
function wpdx_decode_title_entities($title) {
if (isset($title)) {
$title = html_entity_decode($title, ENT_QUOTES, 'UTF-8');
}
return $title;
}
add_filter('document_title', 'wpdx_decode_title_entities');
一般来说,将上面的代码添加到当前主题的 functions.php 或其他插件代码中即可。