网络有点卡,发布按钮点了两下,列表里出现两篇同标题文章,ID 相邻,一篇有特色图片,一篇是空的。前台首页两条都显示。乍看像缓存或者权限的锅,追下去往往不是。

SELECT ID, post_title, post_status, post_date
FROM wp_posts
WHERE post_title = '双十一复盘'
ORDER BY ID DESC;

追下去是这么回事:第一次请求还在等服务端响应,按钮没有禁用,第二次又发了一个完整的 POST。两个请求各自走一遍 wp_insert_post,谁也不知道对方存在,就生成两条记录。

「重复点击发布」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。

具体做法是,先按标题和时间查出重复的那几条,保留内容完整的那篇;另一篇直接移进回收站,别只改标题,别名还会继续冲突;前端提交后立刻禁用按钮,服务端再用标题加时间做一次去重。

验收就看一点,列表里只剩一篇该标题的文章,重复的那篇在回收站里。

作者 9823189