WordPress.org

Codex

Attention Interested in functions, hooks, classes, or methods? Check out the new WordPress Code Reference!

Теги шаблонов/get search form

Описание

Показывает форму поиска, используя файл темы searchform.php.

Использование

<?php get_search_form$echo ); ?>

Параметры

$echo
(boolean) (необязательный) true чтобы отобразить форму; false чтобы вернуть форму в виде строки.
Default: true

Возвращаемое значение

(string) 
HTML-код формы, если параметр $echo равен false.

Примеры

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-сайтах.

HTML5 форма по умолчанию

Начиная с WordPress 3.6, если ваша тема поддерживает HTML5 Markup, что имеет место, если включена такая поддержка:

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>

Среди изменений то, что форма имеет класс class="search-form". Кроме того, для ввода запроса используется тег input типа type="search", а не type="text". Далее, имеется атрибут 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. Есть много возможностей уточнить параметры поиска. Использовав функцию var_dump с объектом $wp_query, вы можете посмотреть значения по умолчанию для всех переменных поиска. Применив var_dump к $wp_query->query, вы можете увидеть текущий запрос.

Еще одна возможность - написать пользовательскую функцию (включить ее в ваш файл functions.php) и привязать ее к get_search_form с помощью "зацепки" (hook).

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-уязвимых мест в теме, если не позаботиться о безопасности.

История изменений

  • Тег добавлен, начиная с версии: 2.7.0

Исходный код

Код get_search_form() находится в wp-includes/general-template.php.

Связанные ссылки

Include Tags