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である必要があり、変数名がなんでもいいわけではないようだ。