ページに検索キーワードを出力するときのesc_html( get_search_query() )とthe_search_query()の使い分け

更新

結論

ページに検索キーワードを出力する場合はthe_search_query()ではなく、esc_html( get_search_query() )を使用するのがより厳密です。

経緯

あるWordPressの本を読んでいたら、検索結果ページで検索キーワードを表示するのにesc_html( get_search_query() )を使用していました。
the_search_query()使えばよくない?」と思ったので、この2つの違いを調べてみました。

出力結果は同じだが、それ自体が通るフィルタとエスケープ処理の際に適用するフィルタが異なる

esc_html( get_search_query() )the_search_query()はどちらも検索キーワードを出力します。両者の出力結果は同じですが、若干異なる部分もあるようです。

the_search_query()は内部的にesc_attr()を用いてエスケープ処理しています。esc_html()esc_attr()は機能的に同じですが、値を返す前に適用するフィルタが異なるとのこと。

また、get_search_query()get_search_queryフィルタを通すが、the_search_query()the_search_queryフィルタを通すという違いもあります。

よって、esc_html( get_search_query() )the_search_query()は、検索キーワードを表示するという意味では同じですが、機能が全く同じというわけではないみたいです。

ちなみにWordPress Codexのサンプルコードでは、ページ中に検索キーワードを表示する際esc_html( get_search_query() )を使用していました。the_search_query()はあくまでinputvalueなどの属性の中で使うもので、テキストの中に埋め込む場合はesc_html( get_search_query() )を使う、という使い分けのようです。確かにこのような使い分けの方がより厳密ですね。

というわけで、ソースコードの粗探しをしていたらまた1つ勉強になった、という話でした。