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がうまく取得できず、固定ページの次のページを取得してしまう時などに参考になれば幸いです。
参考サイト: