问题的根源在于query_posts
. 您要求WordPress加载页面和模板,并从数据库中提取帖子,然后丢弃这些查询,并使用新参数重复它们。
这就像每天早上向爸爸要一杯茶,然后把它扔掉,说你真的想要咖啡。第一次要咖啡比较容易。
这里的新问题是WordPress已经为您处理了分页,但您只是把它全部扔掉了,而您使用的查询没有分页的概念。如果你在第二页,它怎么知道?您尚未将第2页选项传递到查询中,因此它总是按照您的要求显示第1页。
因此,您应该使用pre_get_posts
滤器这个过滤器在WordPress进入数据库之前运行,允许您更改传入的变量。E、 g。
// only show 4 posts per page on the homepage
function homepage_set_posts_per_page( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( \'posts_per_page\', 4 );
}
}
add_filter( \'pre_get_posts\', \'homepage_set_posts_per_page\' );
您可以通过这种方式设置和取消设置查询选项,并使用
get
和其他方法进行更具体的检查
如果您需要显示不在主查询/循环中的帖子,可能是针对小部件或边栏,您应该使用WP_Query
对象e、 g。
// lets query the DB for pages
$loop = new WP_Query( array(
\'post_type\' => \'page\'
));
// did we find posts?
if ( $loop->have_posts() ) {
// yes we did! yay
while( $loop->have_posts() ) {
$loop->the_post();
// display each post
}
// clean up after our loop
wp_reset_postdata();
} else {
// no posts found, we don\'t need to cleanup, but we should probably tell the user we found nothing
}
另一方面,您可以将用户指向
/category/publicatii
并实现
category-publicatii.php
在你的主题中,避开所有的黑客查询等