get_search_query()

get_search_query()
目次

get_search_query()とは?

get_search_query()
現在の検索クエリ(キーワード)を文字列で取得する関数
です。

たとえば、ユーザーが「WordPress テーマ」と検索した場合、
この関数はその文字列を取得できます。

get_search_query()の基本の書式

get_search_query( bool $escaped = true )

get_search_query()の引数

引数説明
$escapedbooltrueの場合は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_queryget メソッド
を使って 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()
  • 安全にエスケープする
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

初めてホームページを作成したのは1996年。
2000年よりフリーランスで主に中小企業、学校、各種公的団体、個人事業主のWordPressを活用したホームページ制作を行っています。WordPressテーマはそれぞれのクライアントに合わせて作成しています。
WordPressを活用したサイト運営のための情報発信をしていきます。

目次