get_search_form() WP 2.7.0

Підключає форму пошуку файл теми searchform.php . Якщо такого файлу в шаблоні теми немає, буде використано дефолтний код для форми пошуку.

Не забувайте про безпеку

У рядок пошуку, користувач може вписати будь-що, наприклад робочий скрипт <script>alert('aaaa');<script>. І якщо вивести рядок запиту на сторінці як є, такий скрипт буде оброблений браузером. А якщо в нього написати щось погане, то ваш веб-сайт можна буде просто зламати.

Тому для виведення запиту пошуку на екран завжди використовуйте функцію WordPress тем .

<?php echo get_search_query(); ?>

Рядок також можна очистити за допомогою: esc_html() .

Повертає

null|Строку.

Використання

<?php get_search_form( $args ); ?>
$args
(true/false/array)

З версії 5.2 параметр перетворився на масив аргументів:

  • echo (true/false)
    Чи потрібно виводити створені HTML-код на екран.
    Типово: true

  • aria_label (рядок)
    Значення артирбуту <form aria-label="XXX">. Буде корисним, щоб розрізняти кілька форм на одній сторінці.
    За замовчуванням: ”

До версії 5.2 параметр називався $echo , був логічним і відповідав за виведення HTML на екран:

  • true — Вивести код на екран.
  • false – повертати для обробки.

За замовчуванням: array()

Приклади

1

#1 HTML форми пошуку через файл searchform.php

Створюємо файл searchform.php у папці теми з кодом:

<form role="search" method="get" id="searchform" action="<?php echo home_url( '/' ) ?>" >
	<label class="screen-reader-text" for="s">Пошук: </label>
	<input type="text" value="<?php echo get_search_query() ?>" name="s" id="s" />
	<input type="submit" id="searchsubmit" value="знайти" />
</form>

Потім, де потрібна форма пошуку, викликаємо функцію get_search_form() , яка виведе вміст створеного нами файлу searchform.php :

<?php get_search_form(); ?>

Майте на увазі, що форма пошуку повинна відправляти GET запит на головну сторінку сайту: action="<?php echo home_url( '/' ); ?>") і обов’язково повинен бути параметр s(що шукати): <input type="text" value="" name="s" id="s" />.

1

#2 HTML форми пошуку за замовчуванням

Якщо у темі немає файлу searchform.php , виклик цієї функції виведе HTML форми за замовчуванням:

<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>

Така HTML розмітка буде виведена, якщо НЕ встановлена ​​підтримка html5 в темі. Нагадаю, встановлюється вона через функцію add_theme_support() так:

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

Однак, якщо підтримка HTML5 включена, то за замовчуванням ми отримаємо такий HTML код форми пошуку:

<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>

Тобто тип поля змінюється із text на search : type="search".

Перевагу варто віддавати html5 формі, тому завжди вмикайте це налаштування в темах!

1

#3 Фільтр (обмеження) результатів пошуку

Крім параметра запиту s, можна відфільтрувати пошук за типом запису. Для цього додайте форму ще одне input поле з ім’ям post_type :

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

В результаті при надсиланні форми (сабміті) ми отримаємо рядок запиту: ?s=текст&post_type=post. А це означає, що пошук проходитиме не за всіма типами записів, а лише за типом запису вказаним у полі name=”post_type” , в даному випадку за типом post . За замовчуванням там зазначено: post_type = any(будь-який тип запису).

Також результати пошуку можна відфільтрувати як завгодно, використовуючи подію pre_get_posts . Приклади дивіться у описі.

0

#4 HTML форми пошуку через хук

Можна не створювати файл теми searchform.php , а змінити HTML код форми через хук get_search_form , який потрібно вставляти у файл теми functions.php .

add_filter( 'get_search_form', 'my_search_form');
function my_search_form( $form ) {

	$form = '
	<form role="search" method="get" id="searchform" action="' . home_url('/' ) . '" >
		<label class="screen-reader-text" for="s">Запит для пошуку:</label>
		<input type="text" value="' . get_search_query() . '" name="s" id="s" />
		<input type="submit" id="searchsubmit" value="Знайти" />
	</form>';

	return $form;
}

список змін

З версії 2.7.0Введено.
З версії 5.2.0$args array parameter був added in place of an $echo boolean flag.

Код get_search_form() WP 6.0.2

function get_search_form( $args = array() ) {
	/**
	 * Fires до search form is retrieved, at the start of get_search_form().
	 *
	 * @since 2.7.0 as 'get_search_form' action.
	 * @ Since 3.6.0
	 * @since 5.5.0 The `$args` parameter was added.
	 *
	 * @link https://core.trac.wordpress.org/ticket/19321
	 *
	 * @param array $args Array of arguments for building the search form.
	 * See get_search_form() for information on accepted arguments.
	 */
	do_action( 'pre_get_search_form', $args);

	$ echo = true;

	if (! is_array($args)) {
		/*
		 * Back compat: для отримання попереднього використання get_search_form() continue to
		 * Function as expected, we handle a value for the boolean $echo param removed
		 * in 5.2.0. Вони беруть участь з $args array and cast його defaults.
		 */
		$echo = (bool) $args;

		// Set an empty array and allow default arguments to take over.
		$args = array();
	}

	// Defaults are to echo and output no custom label on the form.
	$defaults = array(
		'echo' => $echo,
		'aria_label' => '',
	);

	$ args = wp_parse_args ($ args, $ defaults);

	/**
	 * Filters the array of arguments used коли generating the search form.
	 *
	 * @ Since 5.2.0
	 *
	 * @param array $args Array of arguments for building the search form.
	 * See get_search_form() for information on accepted arguments.
	 */
	$args = apply_filters( 'search_form_args', $args );

	// Ensure that the filtered arguments contain all required default values.
	$ args = array_merge ($ defaults, $ args);

	$format = current_theme_supports( 'html5', 'search-form' ) ? 'html5' : 'xhtml';

	/**
	 * Filters HTML формат search form.
	 *
	 * @ Since 3.6.0
	 * @since 5.5.0 The `$args` parameter was added.
	 *
	 * @param string $format Тип маркування для використання в search form.
	 * Accepts 'html5', 'xhtml'.
	 * @param array $args Array of arguments for building the search form.
	 * See get_search_form() for information on accepted arguments.
	 */
	$format = apply_filters( 'search_form_format', $format, $args);

	$search_form_template = locate_template('searchform.php');

	if ( '' !== $search_form_template ) {
		ob_start();
		require $search_form_template;
		$form = ob_get_clean();
	} else {
		// Build a string containing aria-label to use for the search form.
		if ( $args['aria_label'] ) {
			$aria_label = 'aria-label="' . esc_attr( $args['aria_label'] ) . '" ';
		} else {
			/*
			 * Якщо не є custom aria-label, ми можемо написати далі. At the
			 * Moment it's empty as there's uncertainty o what the default should be.
			 */
			$aria_label = '';
		}

		if ( 'html5' === $format ) {
			$form = '<form role="search" ' . $aria_label . 'method="get" class="search-form" action="' . esc_url( home_url( '/' ) ) . '">
				<label>
					<span class="screen-reader-text">' . _x( 'Search for:', 'label' ) . '</span>
					<input type="search" class="search-field" placeholder="' . esc_attr_x( 'Search …', 'placeholder' ) . '" value="' . get_search_query() . '" name="s" />
				</label>
				<input type="submit" class="search-submit" value="' . esc_attr_x( 'Search', 'submit button' ) . '" />
			</form>';
		} else {
			$form = '<form role="search" ' . $aria_label . 'method="get" id="searchform" class="searchform" action="' . esc_url( home_url( '/' ) ) . '">
				<div>
					<label class="screen-reader-text" for="s">' . _x( 'Search for:', 'label' ) . '</label>
					<input type="text" value="' . get_search_query() . '" name="s" id="s" />
					<input type="submit" id="searchsubmit" value="' . esc_attr_x( 'Search', 'submit button' ) . '" />
				</div>
			</form>';
		}
	}

	/**
	 * Filters HTML output of search form.
	 *
	 * @ Since 2.7.0
	 * @since 5.5.0 The `$args` parameter was added.
	 *
	 * @param string $form Search form HTML output.
	 * @param array $args Array of arguments for building the search form.
	 * See get_search_form() for information on accepted arguments.
	 */
	$result = apply_filters( 'get_search_form', $form, $args);

	if ( null === $result ) {
		$result = $form;
	}

	if ( $args['echo'] ) {
		echo $result;
	} else {
		return $result;
	}
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *