在WordPress单文章页面开发自定义查询时,如果需要分页,我们大概率会发现,点击第二页、第三页时,页面会自动跳转到第一页。这个问题比较隐蔽,对WordPress开发不熟悉的初学者可能不知道从何下手来排查。下面我们为大家分析一下这个问题出现的原因,为大家提供解决这个问题的示例代码。
在WordPress中,我们知道,文章列表和单文章页面都可以分页,这两个页面的分页参数名称不一样,文章列表的分页参数名称为「paged」,而单文章页面的分页参数名称为「page」。而大多数分页函数往往会使用「paged」做为分页参数名称,这就导致了用户点击第二页时,系统无法在查询中获取到需要的页码,就会返回默认的第一页。
解决单文章页面没有paged分页参数的示例代码
知道了问题的原因,解决办法就显而易见了,我们只需要在实现自定义文章查询的单文章页面,添加一个「paged」分页参数,并把分页参数「page」的值赋给「paged」,WordPress就能获取到当前页面,获取到对应页码的页面了。示例代码如下:
add_action('template_redirect', function ()
{
if (is_singular('company')) {
global $wp_query;
$page = (int)$wp_query->get('page');
if ($page > 1) {
// 转换 'page' 为 'paged'
$wp_query->set('page', 1);
$wp_query->set('paged', $page);
}
// 移除跳转标准化网站的Hook,防止跳转
remove_action('template_redirect', 'redirect_canonical');
}
}, 0);
把上面的代码添加到WordPress主题的functions.php中,问题就迎刃而解了。
修改分页函数来实现单文章页面分页问题的办法
换一种思路,既然是分页函数默认使用「paged」参数名称导致的这个问题,是不是可以通过修改分页函数,在但文章页面使用「page」这个参数来生成分页链接,就可以解决这个问题呢?我觉得应该是可以的。具体的代码留给各位来实现吧。