Wordpress中的连续上一个和下一个帖子链接

时间:2012-11-22 09:55:07

标签: wordpress-theming wordpress

我所拥有的是一个页面,它显示了一个类别的帖子,底部是一个上一个和下一个帖子链接。我遇到的问题是,当它到达最后一个时,我想循环回到开始。如果你在第一个,它就会结束,如果你在最后一个,就不会回到开始,如果你在最后一个帖子上,它只显示最后一个帖子。

到目前为止,这是我的代码:

<?php 
$prev_post = get_adjacent_post( true, '', true );
$next_post = get_adjacent_post( true, '', false );
$prev_post_id = $prev_post->ID;
$next_post_id = $next_post->ID;
?>

<?php if ($prev_post_id == '') {
$query = new WP_Query( array ( 'orderby' => 'ASC', 'posts_per_page' => '1', 'cat=4' ));

  while($query->have_posts()):
       $query->the_post();
       $prev_post_id = $query->post->ID;
  endwhile;
} ?>
<?php if ($next_post_id == '') {
  $query2 = new WP_Query( array ( 'orderby' => 'DESC', 'posts_per_page' => '1', 'cat=4'    ));
  while($query2->have_posts()):
       $query2->the_post();
       $next_post_id = $query2->post->ID;
  endwhile;
} ?>

<a href="<?php echo get_permalink($prev_post_id); ?>" class="prev-footer-item">
  <div class="prev-inner">
    <h3 class="gamma"><?php echo get_the_title($prev_post_id ); ?></h3>
    <h4 class="delta"><?php the_field('subtitle', $prev_post_id ); ?></h4>
    <div class="footer-overlay"></div>
  </div>
 </a>
<a href="<?php echo get_permalink($next_post_id); ?>" class="next-footer-item">
  <div class="next-inner">
    <h3 class="gamma"><?php echo get_the_title($next_post_id); ?></h3>
    <h4 class="delta"><?php the_field('subtitle', $next_post_id); ?></h4>
    <div class="footer-overlay"></div>
  </div>
</a>

我确信这是很明显我错过了,对吗?

更新: 工作上一篇文章:

[request] => SELECT SQL_CALC_FOUND_ROWS  as1_posts.ID FROM as1_posts  WHERE 1=1  AND as1_posts.post_type = 'post' AND (as1_posts.post_status = 'publish' OR as1_posts.post_status = 'private')  ORDER BY as1_posts.post_date DESC LIMIT 0, 1

不工作下一篇文章:

[request] => SELECT SQL_CALC_FOUND_ROWS  as1_posts.ID FROM as1_posts  WHERE 1=1  AND as1_posts.post_type = 'post' AND (as1_posts.post_status = 'publish' OR as1_posts.post_status = 'private')  ORDER BY as1_posts.post_date DESC LIMIT 0, 1

1 个答案:

答案 0 :(得分:0)

我看不到有什么东西在跳出来,但是我已经为你的两个循环添加了if语句(以防止错误),在每个循环后添加了wp_reset_postdata(),以及删除了对$query$query2的需求 - 如果您不希望将查询结果用于除此之外的其他任何内容,则可以使用$query

另一个想法 - 如果帖子ID不存在,您确定get_adjacent_post()会返回''吗?可能是null'0'。值得做var_dump($next_post_id)并检查。

修改

我忘了提及,get_adjacent_post()假设相邻帖子的post_type与您当前查看的帖子相同。我不能认为这是一个问题,因为你已经说它反过来了,但这是未来需要考虑的事情。

<?php
if($prev_post_id === '') :

    $query = new WP_Query(array('orderby' => 'ASC', 'posts_per_page' => '1', 'cat=4'));

    if($query->have_posts()) : while($query->have_posts()) :
        $query->the_post();
        $prev_post_id = get_the_ID();
        endwhile;
    endif;

    wp_reset_postdata();

endif;

if($next_post_id === '') :

    $query = new WP_Query(array('orderby' => 'DESC', 'posts_per_page' => '1', 'cat=4'));

    if($query->have_posts()) : while($query->have_posts()) :
            $query->the_post();
            $next_post_id = get_the_ID();
        endwhile;
    endif;

    wp_reset_postdata();

endif;
?>