在开发WordPress自定义查询逻辑的时候,当自定义文章查询页面的每页文章数小于后台设置的每页文章数时,经常会出现最后一页为404的问题,这是因为在这种情况下,分页计算的逻辑早于获取文章的查询,实际上,最后一页是有文章的,只是没有显示出来而已。
要解决这个问题,我们只需要再获取文章之前设置好每页的文章数量即可,要做到这一点,使用 pre_get_posts
hook 即可,具体参考下面的代码。
add_action('pre_get_posts', function ($query)
{
if ( ! is_admin() && $query->is_tax('book_cat')) {
$query->set('posts_per_page', 12);
}
});
pre_get_posts 这个Hook的主要作用是在创建查询变量对象之后、运行实际查询之前为我们提供一个修改查询对象的机会,来修改查询变量,我们可以使用这个 Hook 来修改分页查询参数,把文章查询中每页显示的文章数量设置为我们需要的分页数量即可。
除了分页问题,其他类似的问题都可以适用这个 hook 来修改,有需要的朋友可以试试。