按分类筛出结果后第一页数量正确,点第二页条件全没了,列表又回到全部文章,用户得重新筛一遍。乍看像缓存或者权限的锅,追下去往往不是。

$args = array_diff_key($_GET, ['paged' => '']);
$base = add_query_arg($args, home_url('/page/%#%/'));
echo paginate_links(['base' => $base]);

追下去是这么回事:分页函数只负责拼页码,不会自动继承当前查询串里的筛选参数,模板里也没有手动补上这一段,翻页链路就断了,用户就迷路了。

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

能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。报错里带路径的,先去看那个路径在不在、权限对不对。

具体做法是,生成分页链接的时候,先把当前的筛选参数并进去;用 add_query_arg 保留其余参数键,只把页码那一项单独替换掉;页码参数要单独处理,别把它混进筛选条件里去。

验收就看一点,翻到第二页筛选条件仍在,条数和第一页衔接得上,不会跳回全量。

作者 9823189