うまく働いていない、とは?
条件分岐タグ一覧のタグを組み合わせたりするのが一般的かと。
動いていないというのは表現に誤りがありました。
is_home()でtrueが返ってくると思っているのに、falseが返ってきており、意図した結果になっていないというのが正しい表現です。
homeじゃなければ、何のページとして判定されているのか?ということを調べて対策を講じたいと考えています。
こんにちは。
okayosさんが、WPの管理者であるという前提で。
footer.phpの最後(</body>の直前あたり)に
<?php
if ( current_user_can( 'level_10' ) ) {
echo '<pre>';
print_r($wp_query);
echo '</pre>';
}
?>
ログイン後に、表示してあるページのオブジェクトを参照できます。
その中の最後の方に、
~~~省略~~~
[is_single] =>
[is_preview] =>
[is_page] =>
[is_archive] =>
[is_date] =>
[is_year] =>
[is_month] =>
[is_day] =>
[is_time] =>
[is_author] =>
[is_category] =>
[is_tag] =>
[is_tax] =>
[is_search] =>
[is_feed] =>
[is_comment_feed] =>
[is_trackback] =>
[is_home] => 1
[is_404] =>
[is_comments_popup] =>
[is_paged] =>
[is_admin] =>
[is_attachment] =>
[is_singular] =>
[is_robots] =>
[is_posts_page] =>
[is_post_type_archive] =>
~~~省略~~~
という箇所があると思います。
is_home() の返り値が true の場合、 [is_home] => 1 となっており、false の場合は値がありません。
こんにちは、
is_home() が false になるという事だと、トップページに固定ページテンプレートを適用したケースが多いと思います。
固定ページ上で、is_home()を使った条件分岐は、
is_front_page()
が使えると思います。
LVP8さん、nobitaさん、情報ありがとうございました。
結果的に記事のループ中(query_postsで取得)にis_home()判定をしていたのが問題で、アーカイブ判定されていました。
記事のループに入る前にページの状態を保持して、ループの中でページの状態により処理を切り替えたいと思います。
query_postsを使わない方が良いという記事も見かけますので、その辺りも含めて調べてみたいと思います。
具体的な実装として、ループに入ってしまうとis_category()やis_archive()判定になってしまうので、hunction.phpでグローバル変数を宣言し、header.phpで条件分岐タグ(is_home())の結果を前述のグローバル変数に入れ、サブループ内で判定に使っています。
やりたいことはできたのですが、スマートじゃないなと思っているのですが、何か良い方法はないでしょうか?
テンプレートを使いわまし、is_home()の時とis_archive()で処理を変えることはよくあると思うのですが、定番の書き方はないでしょうか?
サブループ内でメインループの状態が取得できれば良いんですが。
ご教授、宜しくお願いします。