サポート » 使い方全般 » is_home()がうまく動かない時の対処

  • is_home()がうまく動いていないのですが、実際どのようなページとして判定されているのかどのように知れば良いのでしょか?
    turu,falseという結果だけではなく、例えば、カテゴリページだったり、固定ページというように具体的にどのようなページとしてWordPressが認識しているか知り、対処を考えたいと思います。
    よろしくお願いします。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • うまく働いていない、とは?

    条件分岐タグ一覧のタグを組み合わせたりするのが一般的かと。

    トピック投稿者 okayos

    (@okayos)

    動いていないというのは表現に誤りがありました。
    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()が使えると思います。

    トピック投稿者 okayos

    (@okayos)

    LVP8さん、nobitaさん、情報ありがとうございました。
    結果的に記事のループ中(query_postsで取得)にis_home()判定をしていたのが問題で、アーカイブ判定されていました。
    記事のループに入る前にページの状態を保持して、ループの中でページの状態により処理を切り替えたいと思います。

    query_postsを使わない方が良いという記事も見かけますので、その辺りも含めて調べてみたいと思います。

    トピック投稿者 okayos

    (@okayos)

    具体的な実装として、ループに入ってしまうとis_category()やis_archive()判定になってしまうので、hunction.phpでグローバル変数を宣言し、header.phpで条件分岐タグ(is_home())の結果を前述のグローバル変数に入れ、サブループ内で判定に使っています。

    やりたいことはできたのですが、スマートじゃないなと思っているのですが、何か良い方法はないでしょうか?
    テンプレートを使いわまし、is_home()の時とis_archive()で処理を変えることはよくあると思うのですが、定番の書き方はないでしょうか?
    サブループ内でメインループの状態が取得できれば良いんですが。

    ご教授、宜しくお願いします。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「is_home()がうまく動かない時の対処」には新たに返信することはできません。