サポート » 使い方全般 » pre_get_posts を使用する場合の条件分岐について

  • トピックについて教えて下さい!

    pre_get_postsを用いてメインループをカスタマイズしようとしています。
    この時の条件分岐として

    is_admin()、is_post_type_archive() などはちゃんと動作するのですが、
    is_page(‘固定ページのslug’)は動作しません。(返り値はNULLになっている?)

    結局、色々調べた結果、$query->query_vars[‘page_id’]==適用させたいページid で条件分岐できたのですが、

    【質問】
    1. is_page(‘固定ページのslug’)はpre_get_postsの条件分岐としては使用できないのでしょうか?
    2. 1.でできないとしたら、その理由はなんでしょうか?
    3. 固定ページの条件分岐としては、このquery_vars[‘page_id’や’pagename’など]がベストなのでしょうか?

    質問が多くなり恐縮ですが、ご教示頂ければ幸いです。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • shouiさん

    ソースコードを見る限り、1の認識で正しいようです。

    2の回答としては、引数のないis_page()はpre_get_postsアクションでも有効に機能する
    けど、is_page(‘固定ページのslug’)のような引数ありの場合は、メインクエリの結果を
    投稿情報として参照し判定するようになっています。してがって、メインクエリの結果が
    出ていないpre_get_postsアクションでは、is_page(‘固定ページのslug’)を呼び出しても
    必ずfalseが返ることになり、意図している結果は得られませんね。

    3についてはshouiさんの書かれている方法になると思います。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック「pre_get_posts を使用する場合の条件分岐について」には新たに返信することはできません。