You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法用含长破折号的字符串替换wp_get_document_title()文本的问题

WordPress标题替换失效的原因及解决办法

可能的原因

  • 空格/分隔符匹配问题:你代码中硬编码的" – "(长破折号前后各一个空格),和wp_get_document_title()返回标题里的分隔符格式可能不一致——比如实际标题里是全角空格、多个空格,或者分隔符前后无空格,导致str_replace找不到匹配项。
  • 字符编码隐性差异:即使肉眼看是长破折号,不同环境下可能存在Unicode编码变体(比如某些相似字符的编码不同),或UTF-8 BOM干扰,导致字符不匹配。
  • 站点名称的额外处理:get_bloginfo('name')返回的内容可能被WordPress过滤(比如转义HTML字符),或包含不可见字符,拼接后的$maintitle和实际标题中的站点名称部分不匹配。

解决办法

方法1:用正则表达式兼容多种分隔符

正则能匹配不同的空格、分隔符变体,适配更多场景:

$site_name = get_bloginfo('name');
// 匹配站点名称前的任意空格+分隔符(长/短破折号)+任意空格,替换为空
$res = preg_replace('/\s*[–-]\s*' . preg_quote($site_name, '/') . '$/', '', wp_get_document_title());

方法2:排查字符差异

先输出原始内容的编码,明确问题所在:

// 输出原始内容对比
echo '文档标题:' . wp_get_document_title() . '<br>';
echo '待替换内容:' . $maintitle . '<br>';
// 输出十六进制编码,精准对比字符
echo '文档标题编码:' . bin2hex(wp_get_document_title()) . '<br>';
echo '替换内容编码:' . bin2hex($maintitle) . '<br>';

通过对比十六进制编码,就能快速定位是空格、字符还是编码的问题。

方法3:按固定结构分割标题

如果标题结构稳定为[页面标题] – [站点名称],可以直接分割:

$title_parts = explode(' – ', wp_get_document_title());
$res = count($title_parts) >= 2 ? trim($title_parts[0]) : wp_get_document_title();

注意这里的分隔符要和实际标题中的完全一致,若有差异可调整分割符。

内容的提问来源于stack exchange,提问作者creators

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:32:24