$allowed = array(10, 20, 50);
$per = isset($_GET['per_page']) ? (int) $_GET['per_page'] : 10;
if (!in_array($per, $allowed, true)) { $per = 10; }
$args['posts_per_page'] = $per;

列表右上角切到每页五十条,当前页确实变了,点第二页又回到十条,刷新一下也变回十条,用户以为选择没保存。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,每页条数只在前端改了当次请求的参数,分页链接是服务端按默认值生成的,没带 per_page。刷新时也没从 URL 里读回来。

「每页条数不生效」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

处理上按这个顺序:把 per_page 写进查询参数,服务端读取时做白名单校验,只允许十、二十、五十;分页链接生成时把 per_page 一起带上,别只带页码;选择框的默认值从 URL 参数回填,刷新后保持用户选的那一档。

改完只确认一件事:选五十条后翻到第二页仍是五十条,刷新页面选择框还停在五十。

作者 9823189