<div class="col-sm-10">
<div class="row">
<?php query_posts(\'offset=1\'); ?>
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
<div class="col-sm-6">
<a class="post-link" href="<?php echo get_permalink(); ?>">
<div class="post">
<div class="post-image">
<?php the_post_thumbnail(); ?>
</div>
<div class="post-title">
<h1><?php the_title(); ?></h1>
<div class="post-excerpt">
<p><?php the_excerpt(); ?><p>
</div>
</div>
</div>
</a>
</div>
<?php endwhile; ?>
<div class="post-nav">
<div class="nav-previous"><?php next_posts_link( \'Older Posts\' ); ?></div>
<div class="nav-next"><?php previous_posts_link( \'Newer Posts\' ); ?></div>
</div>
<?php endif; ?>
</div>
</div>
<div class="col-sm-2">
<?php get_template_part("template-parts/sidebar"); ?>
</div>
</div>
</div>
分页错误-再次显示相同的帖子
1 个回复
SO网友:Tom J Nowell
<?php query_posts(\'offset=1\'); ?>
这是你的问题。分页功能在主查询中起作用,但您在每一页的开头替换主查询,您唯一告诉它的是偏移量是1,它怎么知道您想要第2页?!因此,我将提出一种显著改进的方法。一种不会使数据库查询数量翻倍、污染主查询并且速度显著更快的查询:
这个pre_get_posts
滤器
query_posts
不会修改WP检索到的帖子,WP仍然会去获取它们。该函数将替换查询,因此让我们修改原始查询以获取我们想要的内容,例如。
function add_offset_to_query( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( \'offset\', \'1\' );
}
}
add_action( \'pre_get_posts\', \'add_offset_to_query\' );
请记住,尽管分页依赖于offset
参数,因此此查询永远不会真正使用分页。你还需要把这个放进去functions.php
. WP使用查询来决定加载哪个模板,因此在加载模板时,查询已经运行。
一个好的经验法则是:
切勿使用query_posts
, 假装它不存在,没有有效的用途,它只会带来痛苦和头痛如果你需要更改WP获取的帖子,请使用pre_get_posts
WP_Query 循环get_posts
, get_pages
, etc等所有用途WP_Query
, 节省一些时间,省去中间人,而不是学习许多奇怪的选择
结束