• 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細

このWikiはいつでも誰でも編集できます

関数リファレンス/get search form

提供: WordPress Codex 日本語版
移動先: 案内検索

テーマの searchform.php ファイルを使用して検索フォームを表示します。無ければ WordPress に組み込みの検索フォームを表示します。

注: この searchform.php は、テンプレート階層に含まれる search.php ではありません。search.php は検索結果を表示するテンプレートです。

使い方

<?php get_search_form( $echo ); ?>

パラメータ

$echo
真偽値) (オプションtrue ならフォームを表示します。false なら表示せずフォームを文字列として返します。
初期値: true

戻り値

(文字列) 
パラメータ $echo が false ならフォームの HTML を返します。

用例

デフォルトの HTML4 フォーム

テーマに searchform.php が無い場合は、WordPress に組み込みの検索フォームが使われます:

<form role="search" method="get" id="searchform" class="searchform" action="<?php echo esc_url( home_url( '/' ) ); ?>">
	<div>
		<label class="screen-reader-text" for="s"><?php _x( 'Search for:', 'label' ); ?></label>
		<input type="text" value="<?php echo get_search_query(); ?>" name="s" id="s" />
		<input type="submit" id="searchsubmit" value="<?php echo esc_attr_x( 'Search', 'submit button' ); ?>" />
	</div>
</form>

このフォームは HTML4 の Web サイトで使われます。

デフォルトの HTML5 フォーム

WordPress 3.6 以降、テーマは下記のコードを使って HTML5 マークアップのサポートを明確に選択できるようになりました。

add_theme_support( 'html5', array( 'search-form' ) );

この場合 WordPress は組み込みの HTML5 検索フォームを使用します:

<form role="search" method="get" class="search-form" action="<?php echo home_url( '/' ); ?>">
	<label>
		<span class="screen-reader-text"><?php echo _x( 'Search for:', 'label' ) ?></span>
		<input type="search" class="search-field" placeholder="<?php echo esc_attr_x( 'Search …', 'placeholder' ) ?>" value="<?php echo get_search_query() ?>" name="s" title="<?php echo esc_attr_x( 'Search for:', 'label' ) ?>" />
	</label>
	<input type="submit" class="search-submit" value="<?php echo esc_attr_x( 'Search', 'submit button' ) ?>" />
</form>

HTML4 フォームとの違いは class="search-form" を含むことです。また input タグは type="text" ではなく type="search" です。さらに placeholder 属性があり、適切な場合にそのテキストを表示できます。これは placeholder を表示するのに javascript が不要ということです。 id を持つ要素がないので、一つの有効なドキュメントに複数の検索フォームを配置できます。

テーマの検索フォーム

テーマに searchform.php がある場合は、それを使用します。検索フォームは、ブログのホームページに GET を行わなければならないことに注意してください。入力テキストフィールドの名前は s にして、上述の例のように label を必ず含めてください。

以下はカスタム searchform.php の例です:

<form action="/" method="get">
	<fieldset>
		<label for="search">Search in <?php echo home_url( '/' ); ?></label>
		<input type="text" name="s" id="search" value="<?php the_search_query(); ?>" />
		<input type="image" alt="Search" src="<?php bloginfo( 'template_url' ); ?>/images/search.png" />
	</fieldset>
</form>

送信される唯一のパラメータは s で、現在の検索クエリの値を持ちます。しかしいろいろな形に検索クエリを変更できます。例えば検索結果に投稿だけを(固定ページ等を除外して)表示したければ、下記をフォームに追加します:

<input type="hidden" value="post" name="post_type" id="post_type" />

ここで値 post を送信していますが、デフォルト値は any であり、投稿・固定ページ・カスタム投稿タイプを意味します。上記の input をフォームに追加すると投稿タイプが post である投稿(普通の投稿)だけを表示します。 このような方法でいろいろ追加できます。オブジェクト $wp_queryvar_dump で見ると、検索キーのデフォルト値をすべて確認できます。$wp_query->queryvar_dump で見ると現在の検索クエリを確認できます。

最後の方法は、カスタム関数を作って(テーマの functions.php ファイルに入れる)その関数を get_search_form アクションにフックします。

function my_search_form( $form ) {
	$form = '<form role="search" method="get" id="searchform" class="searchform" action="' . home_url( '/' ) . '" >
	<div><label class="screen-reader-text" for="s">' . __( 'Search for:' ) . '</label>
	<input type="text" value="' . get_search_query() . '" name="s" id="s" />
	<input type="submit" id="searchsubmit" value="'. esc_attr__( 'Search' ) .'" />
	</div>
	</form>';

	return $form;
}

add_filter( 'get_search_form', 'my_search_form' );

参考

検索実行後の検索フィールドに、現在の検索対象のキーワードを表示したい場合、value="<?php echo get_search_query(); ?>" を使います(これは esc_attr( $s ); と必要なフィルターを適用するラッパー関数)。もしセキュアに処理しなければ、ここはテーマの中で XSS 脆弱性が最も発生しやすい箇所の一つです。

変更履歴

ソースファイル

get_search_form()wp-includes/general-template.php にあります。


インクルードタグ: get_header(), get_footer(), get_sidebar(), get_template_part(), get_search_form(), comments_template()


関数リファレンステンプレートタグ目次もご覧ください。


最新英語版: WordPress Codex » Function Reference/get_search_form最新版との差分