WordPress: 固定ページで「前の記事へ」、「次の記事へ」のprevious_post_linkで取得できないときにsetup_postdataを使うとうまくいく

WordPress: 固定ページで「前の記事へ」、「次の記事へ」のprevious_post_linkで取得できないときにsetup_postdataを使うとうまくいきます。

 

<?php
  $column_args = array(
    'post_type' => 'column',
    'posts_per_page' => 1,
  );
  $column_posts = get_posts($column_args);
  if (!empty($column_posts)): foreach ($column_posts as $post): setup_postdata($post); 
?>
//ここでsetup_postdata();を使用します
  <h2><?php the_title(); ?></h2>
  <div class="entry">
    <?php the_content(); ?>
  </div>
  <?php $postid = get_the_ID(); ?>
<?php endforeach; endif;  ?>
//wp_reset_postdata();を使用せずに下のページャーのあとに使用します。


<ul class="page_link">
  <?php 
  $prev_post = get_previous_post(); 
  if (!empty($prev_post)) {
    $prev_post_id = $prev_post->ID;
    echo '<li class="prev"><a href="'. _SITEURL. '/sp/column/' . $prev_post_id .'">前の記事</a></li>';
  }
  $next_post = get_next_post(); 
  if (!empty($next_post)){
    $next_post_id = $next_post->ID;
    echo '<li class="next"><a href="'. _SITEURL. '/sp/column/' . $next_post_id . '">次の記事</a></li>';
  }
  wp_reset_postdata();
  ?>
</ul>


 

setup_postdata()は投稿情報を各種のグローバル変数へセットします。
そのため、setup_postdataを使用した後に、リセットしなければ、投稿情報の取得に使用できるのです。

あまり固定ページに詳細ページを表示させることは少ないかと思いますが、そんなときにnext_post_link、previous_post_linkがうまく取得できず、固定ページの次のページを取得してしまう時などに参考になれば幸いです。

 

 

参考サイト:

https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/setup_postdata

 

category cloud