在模板中,我的子主题中有一个自定义循环函数。php文件来循环特定的帖子类型(“列表”),然后将其放入数组中,以用于模板的一部分。
下面是一个代码示例
public function loop()
{
global $wp_query;
$featured = $regular = array();
foreach ($wp_query->posts as $count => $post)
if (has_term(\'featured\', \'listings_tag\', $post->ID))
$featured[] = $post;
else
$regular[] = $post;
$posts = array_merge($regular, $featured);
$posts = array_reverse($posts);
include(\'templates/loop.php\');
}
所以这很好,但是,它在每11篇文章之后分页。相反,我希望它显示所有内容。
我尝试在函数中添加自定义操作。php,使用“pre\\u get\\u posts”挂钩。然而,它对我的代码没有任何影响。
function show_all($query){
if (is_post_type_archive(\'listings\') && $query->is_main_query()) {
$query->set(\'nopaging\', True);
}
}
add_action(\'pre_get_posts\', \'show_all\');
有什么建议吗?
最合适的回答,由SO网友:Tom J Nowell 整理而成
nopaging
并没有获取所有帖子,它只是告诉WordPress不要费心去弄清楚有多少页之类的东西。
您真正想要的不是禁用分页,这只是您所问问题的解决方案。你应该询问你的问题,也就是如何一次显示所有帖子。
一次显示所有帖子可能很危险,因此,请设置一个非常高的限制,例如:
$query->set(\'posts_per_page\', 500 );
任何超过500篇的帖子都可能会引起问题,或者速度非常慢,而且非常冗长。这样做的目的是指定一个您从未期望达到的数字。这样你就知道最坏的情况是不会发生的。当你知道页面不会被破坏的事实时,为什么要相信不会有一个坏掉的插件或者一个客户端意外地做了什么?