WP多圈 - 最新帖子&分页

时间:2014-11-13 05:22:23

标签: php wordpress loops pagination

我希望有人可以帮我解决这个问题。它给了我一些问题。我正在尝试让自定义类别页面显示页面开头的最新帖子,而在下面的单独循环中我希望显示给定类别WITH分页中的其余帖子,将循环偏移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; ?>

2 个答案:

答案 0 :(得分:1)

这当然可以做到,但肯定不会用query_posts。这样的情况,它将完全失败。此外,如果您不知道自己在做什么,抵消会破坏分页并且很难处理

我现在没有时间编写代码,但这是一个想法:

如果您需要在所有页面上显示最新帖子,则可以执行以下操作。

  • 删除自定义查询和偏移量,以便一切正常。正常使用默认循环和分页

  • 要在每个页面上显示您的第一篇帖子,请使用WP_Query创建自定义查询,并将其放置在您需要显示此帖子的位置。请参阅有关如何正确构建该查询的链接。请不要使用query_posts

  • 现在您将看到第一个帖子显示两次。要解决此问题,请将自定义查询包装在is_paged()条件下。

修改

你可以尝试这样的事情。 ( PS!showposts已弃用,请使用posts_per_page。此外,您可以在设置paged时删除offset参数,因为它会被忽略

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();
} 

答案 1 :(得分:0)

Codex声明:在查询中指定硬编码偏移可以并且打破分页,因为WordPress在内部使用偏移来计算和处理分页。

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