query_posts()を利用すると、is_single()が動作しない

Wordpressで一瞬はまったのでメモ。

single.phpもcategory.phpもindex.phpもすべて同一のテンプレートファイルから記事のループを呼び出していたら、単一記事のページでis_single()が動作せず。

記事ループ部分修正前

<?php
  query_posts( 'cat=-3' );
  if (have_posts()) : while (have_posts() ) : the_post();

(中略)

        if(is_single()): ?>
	  echo  "<p>hogehoge</p>";
        endif;
  endwhile;
  wp_reset_query();
  endif;
?>

原因はquery_posts()だった。single.phpのみ記事読み込み部分をテンプレートから呼び出すのをやめ、直接query_posts()を削除したループを書き込んでみたら動作した。

記事ループ部分修正後

<?php
  if (have_posts()) : while (have_posts() ) : the_post();

(中略)

        if(is_single()): ?>
	  echo  "<p>hogehoge</p>";
        endif;
  endwhile;
  wp_reset_query();
  endif;
?>