防止WordPress自动将站点标题中“-”自动转义成–

我们知道WordPress有些自动功能,出于安全的考虑或者外国人的习惯问题,经常有点有点水土不服的意味。当然WordPress也是过于好心了,毕竟全世界这么多的站点都是运行着WordPress,只能照顾到大部分的需求,而不能精准解决部分人的要求了。否则也不会有数以万计的插件、主题了。毕竟,有了这个平台,怎么搭建出符合自己要求的网站,就是各有各的想法和实现的过程了。

而WordPress的自动转义,是使用了wptexturize()函数将纯文本字符转换成格式化的 HTML 实体,即形如–会转换成–这样的文本,显示的时候是没有问题,但是查看源代码是可以看到的。另外某些搜索引擎是没有差异化的对待转义后的实体,直接收录。

图1.源代码中的转义

这时候也不是那么好看了,特别是某些时候还会变的比较凌乱。因此需要从侧面来解决这个问题,使之不那么“自动化智能化”。关于wptexturize()函数的介绍在WordPress的官网上有https://developer.wordpress.org/reference/functions/wptexturize/Replaces common plain text characters into formatted entities ,大致的意思是将普通纯文本字符替换为格式化实体。函数是在wp-includes/formatting.php 这个文件中的,51行开始,一直到315行的样子,简单摘录下:

function wptexturize( $text, $reset = false ) {
global $wp_cockneyreplace, $shortcode_tags;
static $static_characters = null,
$static_replacements = null,
$dynamic_characters = null,
$dynamic_replacements = null,
$default_no_texturize_tags = null,
$default_no_texturize_shortcodes = null,
$run_texturize = true,
$apos = null,
$prime = null,
$double_prime = null,
$opening_quote = null,
$closing_quote = null,
$opening_single_quote = null,
$closing_single_quote = null,

既然知道代码函数了,那么要解决也比较有针对性了,根据网上其他人的指引,大概有三个方法:

方法一,使用插件。

Quotmarks Replacer 插件可以通过禁用 wptexturize 函数,解决 WordPress 自动将半形的单引号、双引号和省略号转换为全形标点的问题。使后台输入的标点格式与前台读者浏览的标点格式保持一致。并且对 multisite 多站点(WordPress Mu)有良好的支持。插件可以在WordPress官网下载https://wordpress.org/plugins/quotmarks-replacer/#description

方法二,禁用该函数。

通过把该代码加到functions.php函数中,即可实现相应的结果。

add_filter( 'run_wptexturize', '__return_false' );

方法三,禁止函数对标题的转义

通过如下的代码来完成:

remove_filter('the_title', 'wptexturize');
remove_filter('wp_title', 'wptexturize');
remove_filter('single_post_title', 'wptexturize');

这样的话就不会出现在站点标题、页面的标题中出现的&#8211字符。

如上三种方法在网上都有相应的介绍,但测试了二、三方法,二可以达到效果,三却不行。不知道是否WordPress升级后的原因引起。

图2.已经恢复正常的状态-

另外如果把wp-includes/formatting.php中的116行这行注释掉,会是这样的效果,-消失了。但文章页面依然存在转义的情况。

$en_dash = _x( '–', 'en dash' );
图3.注释掉代码后的效果
图4.单独的文章页面依旧转义

然后突然回过头来试用下方法二,发现仅对首页首页有效,对单独的文章页面与图4一致。看来还是不得其法,并没有完全解决这个问题。各位有没有更好的方法?

另外也是实际没有特别的效果,因此暂告一段落。