一篇长标题文章发布后地址打开是 404,后台列表里能看到,编辑页的别名只显示前两百个字符,后面的被切掉了。乍看像缓存或者权限的锅,追下去往往不是。
wp db query 'SELECT ID, CHAR_LENGTH(post_name) AS len FROM wp_posts WHERE post_type="post" AND CHAR_LENGTH(post_name) > 60;' wp post update 1847 --post_name=short-slug
追下去是这么回事:文章表的 post_name 字段是 varchar(200),超长别名入库时被静默截断,不报错。固定链接按截断后的值生成,编辑器里显示的还是完整标题转来的别名,两边对不上。
「slug 长度截断」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。
能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
具体做法是,发布前手动把别名压到六十字符以内,保留关键词就够;已截断的文章重新填一个短别名并保存;旧地址加一条 301,指向新的短地址;在主题里限制自动生成别名的长度,别等入库才发现。
验收就看一点,文章地址能正常打开,别名长度不超过六十,旧的长地址 301 到新地址。
