我希望有人能帮我算出这个。这给我带来了一些问题。我试图让一个自定义类别页面在页面的开头显示最近的帖子,下面在一个单独的循环中,我希望用分页显示给定类别中的其余帖子,将循环偏移1。我已经寻找了很多方法来做到这一点,但都无法找到解决方案!如果你能为这件事提供任何帮助,我将不胜感激!提前谢谢!这是我的代码:
<?php query_posts( 'cat=3&showposts=1&offset=0'); ?>
<?php while (have_posts()) : the_post(); ?>
<div class="firstPost">
Snipped post style
</div>
<div class="prevHeader">Previous Episodes</div>
<?php endwhile; ?>
<div class="container archiveContainer">
<?php
// set the "paged" parameter (use 'page' if the query is on a static front page)
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
// the query
$the_query = new WP_Query( 'cat=3&posts_per_page=6&offset=1&paged=' . $paged );
?>
<?php if ( $the_query->have_posts() ) : ?>
<?php
// the loop
while ( $the_query->have_posts() ) : $the_query->the_post();
?>
<div class="prevEntries">
Snipped Post Style
</div>
<?php endwhile; ?>
</div>
<div style="width:100%">
<span style="display:inline-block; margin-left:10px; float:left" class="nav-previous"><?php next_posts_link( '<h4>Older posts</h4>', $the_query->max_num_pages ); ?></span>
<span style="display:inline-block; margin-left:10px; float:right" class="nav-next alignright"><?php previous_posts_link( '<h4>Newer posts</h4>' ); ?></span></div>
<?php
// clean up after the query and pagination
wp_reset_postdata();
?>
<?php endif; ?>
这当然可以做到,但使用query_posts
肯定不行。如果是这样的情况,它将彻底失败。此外,如果你不知道自己在做什么,偏移会破坏分页,并且很难使用
我现在没有时间编码,但这里有一个想法:
如果你需要在所有页面上显示最新的帖子,那么你可以执行以下操作。
-
删除您的自定义查询和偏移量,以便一切正常。使用默认循环并按正常进行分页
-
若要在每页上显示您的第一篇文章,请使用
WP_Query
创建一个自定义查询,并将其放置在需要显示此文章的位置。请参阅有关如何正确构建该查询的链接。请不要使用query_posts
-
现在,您将看到第一个帖子显示了两次。要解决此问题,请将自定义查询包装在
is_paged()
条件中。
编辑
你可以试试这样的东西。(PS!showposts
已折旧,请使用posts_per_page
。此外,您可以在设置offset
时删除paged
参数,因为它将被忽略)
(CAVEAT未测试)
if( is_paged() ) {
$args = array(
'posts_per_page' => 1,
'cat' => 3,
);
$q = new WP_Query( $args );
if( $q->have_posts() ) {
while( $q->have_posts() ) {
$q->the_post();
// Display your loop elements
} //end while
wp_reset_postdata();
} // end if have_posts()
} //end if is_paged
// Now for your main loop
// set the "paged" parameter (use 'page' if the query is on a static front page)
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$the_query = new WP_Query( 'cat=3&posts_per_page=6&paged=' . $paged );
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
// Your loop elements
}
wp_reset_postdata();
}
Codex声明:在查询中指定硬编码偏移量可以并且将中断分页,因为偏移量由WordPress内部用于计算和处理分页
请参阅以下链接。如页面所述,您需要使用挂钩和过滤器。