ホーム > タグ > sidebar

sidebar

wp_reset_query();

サイドバーの中で条件分岐をしようとして

  1. <?php if ( is_home() ) { ?>
  2. <?php echo ‘<!– is home –>’; ?>
  3. <p>ここはトップページです</p>
  4. <?php } else { ?>
  5. <p>ここはトップページではありません</p>
  6. <?php } ?>

と書いたら、トップページ以外のページでも「ここはトップページです」と表示されてしまってうまくいかない。

ググってみたら、本家のフォーラムで対処法を発見(http://wordpress.org/support/topic/274757

  1. <?php wp_reset_query(); ?>
  2. <?php if ( is_home() ) { ?>
  3. <?php echo ‘<!– is home –>’; ?>
  4. <p>ここはトップページです</p>
  5. <?php } else { ?>
  6. <p>ここはトップページではありません</p>
  7. <?php } ?>

こう書いてうまくいった。

でも、「wp_reset_query();」って何だろう?何でこれがないとうまくいかないのか

で発見したのがこのページ

重要なのはループの前のquery_postsとループの後のwp_reset_query()
query_postsを使う場合wp_reset_query()を最後につけないとqueryの指定が後のループに引き継 がれる。

つまり、home.phpで使っていた「<?php query_posts(); >」がずっと有効になっていて、それが理由でサイドバーの方がうまく動いてくれなかったんだね。

ということで、home.phpの該当部分に「<?php wp_reset_query(); ?>」を書き加えて一件落着。

Home > Tags > sidebar

Search
Feeds
Meta

Return to page top