文章别名直接填了「本周更新说明」,前台链接变成 /2026/11/%e6%9c%ac%e5%91%a8%e6%9b%b4%e6%96%b0%e8%af%b4%e6%98%8e/,分享出去被人当成乱码。日志里能对上时间点,这种反而好排。

sanitize_title() 对非 ASCII 字符走的是 urlencode,中文没有对应的音译规则,整段就被转成百分号。数据库里 post_name 存的就是这串编码,换模板也绕不过去。这一点先确认清楚,后面就不用反复试。

SELECT ID, post_name FROM wp_posts
WHERE post_status = 'publish'
  AND post_name LIKE '%\%%';
-- 反斜杠转义百分号,筛出被编码的别名

这次卡住的地方就在「中文 slug 编码」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。

处理上按这个顺序:编辑页把别名换成英文或拼音,短一点,别用下划线和空格;已经发出去的老文章用 wp post update 批量改别名,改完记录新旧对照;旧链接补 301,否则外链和收录全部落到 404。

结果对不对很好判断,文章链接里不再出现百分号,复制到地址栏能直接打开。

作者 9823189