它在分类页面上工作得非常好,但当我在页面上进行类似查询时,它就不工作了
我知道你为什么用query_posts()
—分页功能(kriesi_pagination()
) 使用主查询(全局$wp_query
变量)来获取查询的页数,因此您认为使用query_posts()
会使分页工作正常,对吗?
基本上是这样的。但您的查询参数缺少paged
参数(&M);更多详细信息here.
尽管如此,没有必要使用query_posts()
因为自定义分页函数实际上允许传递自定义页数,这是函数的第一个参数。
因此,只需创建WP_Query
并传递实例的$max_num_pages
属性(即。WP_Query::$max_num_pages
) 分页功能:
$query = new WP_Query( [
// .. your args here.
\'paged\' => max( 1, get_query_var( \'paged\' ) ),
] );
if ( $query->have_posts() ) :
while ( $query->have_posts() ) :
$query->the_post();
// .. your code.
endwhile;
endif;
kriesi_pagination( $query->max_num_pages );
wp_reset_postdata();
每次创建自定义/辅助实例时的附加注释WP_Query
and calls the_post()
(或setup_postdata()
), 一定要打电话wp_reset_postdata()
循环结束后,使全局$post
变量将还原回主查询中的当前帖子。否则,例如,下一次调用the_title()
要在主查询中显示当前帖子的标题,可以在上面的查询中看到最后一篇帖子的标题,而不是所谓的主查询。
您还应该知道,在分类/归档/搜索等“复数”页面上$wp_query->max_num_pages
值可以是2或更多,具体取决于主查询中的帖子总数和每页帖子设置(默认为10
). 所以,如果“我的页面”是指一个页面(即page
类型),然后$wp_query->max_num_pages
永远都是1
. 这可能就是“你知道为什么吗?”在问题中。
如果kriesi_pagination()
仍然不适合您,您可以尝试使用paginate_links()
:
echo paginate_links( [
\'total\' => $query->max_num_pages,
\'current\' => max( 1, get_query_var( \'paged\' ) ),
] );
最后但并非最不重要的是,
avoid using query_posts()
正如WordPress核心团队所建议的:
它修改主查询的过于简单的方法可能会有问题,应该尽可能避免。In most cases,
there are better, more performant options for modifying the main query
such as via
the pre_get_posts
action
within WP_Query
.
快乐的编码!