WordPress get_posts(),setup_postdata()での注意事項
get_posts()で取得したデータをループさせてthe_title()などを使用する場合、setup_postdata()を使うが、これに指定する引数は"$post"でないと動かない。
<?php $myposts = get_posts('posts_per_page=10&cat=' . get_query_var('cat')); if (count($myposts) > 0) : foreach ($myposts as $post) : setup_postdata($post); ?> <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3> <?php endforeach; else: ?> <p>現在、該当する記事はありません。</p> <?php endif; wp_reset_postdata(); ?>
例えば、上記のforeachの$postが$mypostとかにするとメインループの最初のデータだけを繰り返し表示しているように見える。
グローバル変数の$postである必要があり、変数名がなんでもいいわけではないようだ。