WordPressテンプレートのfooter.phpでis_home()が効かない場合


WordPressのテンプレートに含まれるfooter.phpにis_home()でトップページの判定をしてif文を追加したところ、うまく表示されなかったので調べてみました。

query_posts() を用いている場合wp_reset_query()を用いる必要がある

footer.phpより先にquery_post()を用いたプログラムが入っている場合、is_home()が無効化されるようです。

query_posts() はWordPressが投稿を表示するのに使用しているメインクエリーを置き換える手段です。これはメインクエリーを一旦横に置いておき、新しいクエリーで上書きします。query_posts を呼び出したあとは、クエリーの改変を戻すために、wp_reset_query() を呼び出し、オリジナルのメインクエリーを復活させる必要があります。
WordPress Codex 日本語版

私の場合は、トップページにオリジナルのテンプレートでquery_post()が用いられていたため、このような現象が発生したようです。そのためfooter.phpに以下のようなコードを追加しました。

<?php
 wp_reset_query();//一度リセット
 if(is_home()): ?>
 ・・・・トップページのときの内容 ・・・・
 <?php else: ?>
 ・・・・トップページ以外のときの内容 ・・・・
 <?php endif; ?>

 

atnr.net の RSS登録はこちらから