
get_search_query()とは?
get_search_query()
は
現在の検索クエリ(キーワード)を文字列で取得する関数
です。
たとえば、ユーザーが「WordPress テーマ」と検索した場合、
この関数はその文字列を取得できます。
get_search_query()の基本の書式
get_search_query( bool $escaped = true )
get_search_query()の引数
引数 | 型 | 説明 |
---|---|---|
$escaped | bool | trueの場合はHTMLエスケープされた文字列を返す(デフォルト:true) |
get_search_query()の戻り値
文字列(検索キーワード)
get_search_query()の実際の使い方
1. 現在の検索クエリを取得
検索結果ページで使います。
$query = get_search_query();
例:
ユーザーが s=SEO 対策
を検索した場合
$query = get_search_query(); // "SEO 対策"
2. エスケープなしで取得
$query = get_search_query(false);
false
にするとサニタイズされていない生の文字列が取得されます。
get_search_query()のよく使う例
検索フォームに値を保持
多くのテーマで「検索したキーワードをフォームに残す」ときに使います。
実例:検索フォーム
<form method="get" action="<?php echo esc_url(home_url('/')); ?>">
<input type="search" name="s" value="<?php echo get_search_query(); ?>">
<button type="submit">検索</button>
</form>
これで検索結果ページに来たとき、入力欄にキーワードが表示されます。
タイトルにキーワードを出す
<h1>
「<?php echo get_search_query(); ?>」の検索結果
</h1>
検索フォームに関する注意
検索フォームでは必ずesc_attr()
で属性エスケープを使うのが推奨です。
例:
<input type="search" value="<?php echo esc_attr(get_search_query()); ?>">
これにより「”」や「<」など特殊文字が安全に表示されます。
検索クエリの取得元
内部的には、
グローバル変数 $wp_query
の get
メソッド
を使って s
パラメータ(検索キーワード)を取得しています。
get_search_query()のよくある質問
- 検索ページ以外で呼ぶとどうなる?
-
空文字が返ります。
the_search_query()
との違いは?-
the_search_query()
は「そのまま出力するテンプレートタグ」です。関数 用途 get_search_query()
値を取得(echoしない) the_search_query()
エスケープ済みで直接出力 the_search_query()
例<input type="search" value="<?php the_search_query(); ?>">
この場合は
esc_attr()
不要です。
フィルターフック
get_search_query()
は**get_search_query
フィルター**を通ります。
フィルター例:大文字に変換
add_filter('get_search_query', function($query){
return mb_strtoupper($query);
});
get_search_query()の応用例
検索結果ページでタイトルを動的に作る
<?php if ( is_search() ) : ?>
<h1>「<?php echo esc_html(get_search_query()); ?>」の検索結果</h1>
<?php endif; ?>
メタ情報として表示
<p>検索キーワード: <?php echo esc_html(get_search_query()); ?></p>
複数単語の扱い
ユーザーが「WordPress テーマ SEO」を検索した場合:
get_search_query(); // "WordPress テーマ SEO"
スペースもそのまま含まれます。
検索クエリをURLエンコードする
リンクにキーワードを付与する場合はurlencode()
を使います。
例:
$keyword = urlencode(get_search_query(false));
$url = home_url('?s=' . $keyword);
よく使う組み合わせ
get_search_query()
+ esc_html()
→ タイトルや本文に出すとき
get_search_query()
+ esc_attr()
→ inputタグのvalueに出すとき
検索ページでの判定
検索結果ページかどうかを確認するにはis_search()
を使います。
例:
if ( is_search() ) {
echo '検索ページです';
}
フロントエンド用コード例
<?php if ( is_search() ) : ?>
<h2>検索結果:「<?php echo esc_html(get_search_query()); ?>」</h2>
<p>以下が検索結果一覧です。</p>
<?php endif; ?>
よくあるミス
フォームにesc_html()を使う
<input value="<?php echo esc_html(get_search_query()); ?>">
→ 属性ではesc_attr()
を使うのが正解です。
正しい例
<input value="<?php echo esc_attr(get_search_query()); ?>">
関連関数まとめ
関数 | 用途 |
---|---|
get_search_query() | 検索クエリを取得 |
the_search_query() | エスケープ済みで出力 |
get_search_link() | 検索結果URLを取得 |
is_search() | 検索結果ページか判定 |
get_search_query()のまとめ
get_search_query()
は検索キーワードを取得する関数- 引数
$escaped
でエスケープ有無を指定 - フォームには
esc_attr()
を使う - タイトルやメタ情報にも便利
is_search()
と組み合わせて使う
ポイント
- 値を取得 →
get_search_query()
- そのまま表示 →
the_search_query()
- 安全にエスケープする