WordPressのサブループで$posts = get_posts($args)とするとハマる
<?php $posts = get_posts( $args ); ?> <?php foreach($posts as $post) : setup_postdata($post); ?> <p><?php the_title(); ?></p> <?php endforeach; ?>
と書いてサブループを作ってしまうと、のちに続くメインループが上書きされてしまいます。ハマります。なので、$postsは$my_postsとかにしておく必要があるそうです。
$posts = と書かないのは、$posts を復元する関数が用意されていないからです。
WordPress ループ&クエリーのモヤモヤを解消しよう! | wpxtreme
勉強ばっかりで開発が進まねぇ。