WordPressのis_search()がtrueになる条件

カスタム投稿タイプの記事を対象にした検索で条件分岐をしようとした時に、
is_search()がtrueになっていなかったので、条件分岐についてちょっとメモを残して置きたい。

結論から言うと、is_search()がtrueとなるためには、検索を実行するだけではなく、検索フォームでsパラメータをわたしてあげる必要があるっぽい。

はじめはsearch.phpのテンプレートが必要なのかと思ったが、そういうことではないらしい。

<input type="text" value="<?php echo get_search_query(); ?>" name="s" id="s" placeholder="投稿の検索" />

挙動だけで確認しただけなので、根拠となるロジックまでたどり着いていないのだが、とりあえずsパラメータをわたしてあげたところ、is_search()はtrueとなった。

ちなみに、is_search()がtrueの時は、基本的にis_archiveもtrueになる。

なので、条件分岐でis_archiveとis_searchを同時に分岐させたい場合には、意図した制御になるように注意が必要。

よくある書き方はこんな感じ。

<?php if ( is_archive() ) : ?>
    <?php elseif ( is_search() ) : ?>
        処理1
    <?php elseif ( is_404() ) : ?>
        処理2
    <?php elseif ( is_home() ) : ?>
        処理3
<?php endif; ?>