在“待审核”筛选下编辑一篇文章,点更新后回到全部文章列表,筛选没了,要重新点一次才能继续审。日志里能对上时间点,这种反而好排。
保存后的跳转用 admin_url 重新拼地址,没有带上原来的 query,redirect_post_location 过滤器里也没保留 post_status。referer 被安全插件清掉后更拿不到条件。这一点先确认清楚,后面就不用反复试。
add_filter('redirect_post_location', function ($location, $post_id) {
return add_query_arg(['post_status' => $_REQUEST['post_status'] ?? 'all'], $location);
}, 10, 2);
「保存后筛选丢失」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
报错里带路径的,先去看那个路径在不在、权限对不对。同一份配置存在多处的,先确认改的是被加载的那一份。
新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
处理上按这个顺序:用 add_query_arg 把原筛选参数拼回跳转地址;挂 redirect_post_location 过滤器统一处理;确认安全插件没有清空 HTTP_REFERER。
结果对不对很好判断,更新后回到“待审核”列表,URL 里仍带 post_status=pending。
