概述

默认情况下,WordPress 会将 Title 标题中的破折号 <code>-</code>、与符号 <code>&</code> 等特殊符号进行转义(例如:<code>-</code> 转义为 <code>–</code>,<code>&</code> 转义为 <code>&</code>)。部分 SEO 人员声称这会导致 SEO 问题,但该说法无任何实际依据。若你仍希望解决这一“所谓问题”,可参考本文教程。

一、WordPress 为什么要转义特殊字符

一句话:为了安全。通过转义特殊字符,可避免某些极端情况下的恶意代码输出(尽管此类情况极少发生,且具体恶意利用方式尚不明确)。

转义后的代码结果(如 <code>–</code> 代替 <code>-</code>)仅为 HTML 实体的文本表示,不会对 SEO 产生不利影响——否则 WordPress 官方开发团队不会将其作为默认行为。

二、不推荐的或无效的处理方法

(一)不推荐的方法

网络上常见的解决方法是全局禁用 <code>wptexturize</code> 功能,示例如下:

add_filter(&#039;run_wptexturize&#039;, &#039;__return_false&#039;);

强烈不推荐此方法!因为 <code>wptexturize</code> 在其他场景中(如正文、评论内容)通过转义增强安全性仍有必要,全局禁用可能引入潜在风险。

(二)失效的方法

自 WordPress 4.4 起,官方建议使用 <code>add_theme_support('title-tag');</code> 启用 Document Title 机制输出标题,不再直接通过 <code>wp_title()</code> 函数输出标题。因此,以下方法在现代主题中已普遍失效(仅适用于极老旧主题):

// 以下方法现已失效,无需尝试
remove_filter(&#039;the_title&#039;, &#039;wptexturize&#039;);
remove_filter(&#039;wp_title&#039;, &#039;wptexturize&#039;);
remove_filter(&#039;single_post_title&#039;, &#039;wptexturize&#039;);

三、正确的禁止 Title 转义的方法

现代 WordPress 主题均通过 <code>add_theme_support('title-tag');</code> 启用 Document Title,标题最终由 <code>wp_get_document_title()</code> 函数输出。该函数最末端提供了一个 <code>document_title</code> 过滤钩子,我们可通过此钩子将转义后的 HTML 实体反转义为原始符号,且仅影响标题输出,无需全局禁用 <code>wptexturize</code>

实现代码

将以下代码添加到当前主题的 <code>functions.php</code> 文件或自定义插件中即可:

/**
 * 禁止 WordPress 转义 title 标题中的破折号 - 和 &amp; 号等特殊符号
 * 来源:https://www.wpdaxue.com/disable-title-wptexturize.html
 */
function wpdx_decode_title_entities($title) {
    // 若标题存在,则反转义 HTML 实体为原始字符(支持 UTF-8 编码)
    if (isset($title)) {
        $title = html_entity_decode($title, ENT_QUOTES, &#039;UTF-8&#039;);
    }
    return $title;
}
// 挂载到 document_title 过滤钩子
add_filter(&#039;document_title&#039;, &#039;wpdx_decode_title_entities&#039;);

原理说明

  • <code>html_entity_decode($title, ENT_QUOTES, 'UTF-8')</code>:将 HTML 实体(如 <code>–</code>、<code>&</code>)解码为原始字符(<code>-</code>、<code>&</code>),<code>ENT_QUOTES</code> 参数确保同时处理单引号和双引号实体,<code>UTF-8</code> 保证中文等多字节字符正常显示。
  • <code>document_title</code> 钩子:仅在标题输出前触发,不影响其他内容(如正文、评论)的转义逻辑,安全性与灵活性兼顾。

通过以上方法,即可精准解决 Title 标题特殊符号转义问题,且不影响 WordPress 整体安全性。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。