一篇长文写了两个多小时,点更新直接跳到错误页,红字写着「链接已过期」,返回后内容还在,再点一次还是同样的报错。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

wp eval 'var_dump( wp_verify_nonce( "a1b2c3", "update-post_512" ) );'
wp option get timezone_string

后台表单带的是 nonce,有效期按 12 小时一个周期滚动,跨过两个周期就判定失效。页面开着不动,nonce 不会自己刷新,提交时自然对不上。这一点先确认清楚,后面就不用反复试。

「nonce 过期」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

具体做法是,先把正文复制出来,再刷新页面重新进入编辑,别在原页面反复点;确认服务器时间准确,时区差几小时会让 nonce 提前失效;后台页面别交给整页缓存插件,登录态的 HTML 一旦被缓存,nonce 就是旧的。

改完照着核一遍,刷新后重新保存能正常跳回列表页,不再出现「链接已过期」。

作者 9823189