WP多循环 - 最新的帖子和分页



我希望有人能帮我算出这个。这给我带来了一些问题。我试图让一个自定义类别页面在页面的开头显示最近的帖子,下面在一个单独的循环中,我希望用分页显示给定类别中的其余帖子,将循环偏移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内部用于计算和处理分页

请参阅以下链接。如页面所述,您需要使用挂钩和过滤器。

最新更新