WordPress как на ладони
wordpress jino

the_search_query() WP 2.1.0

Выводит текущий поисковой запрос. Используется на странице вывода результатов поиска (search.php).

the_search_query() можно безопасно использовать внутри атрибутов html тегов (см. примеры).

Работает на основе: get_search_query()
✈ 1 раз = 0.000017с = очень быстро | 50000 раз = 0.04с = скорость света PHP 7.1.2, WP 4.7.3
Хуки из функции:

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

<?php the_search_query(); ?>

Примеры

#1. Выведем поисковой запрос в поле ввода запроса

После того как запрос был отправлен бывает удобно оставить этот запрос в поле куда он вводился (в поле поиска), сделать это можно так:

<input type="text" value="<?php the_search_query(); ?>" name="s" id="s" />

#2. Выведем поисковой запрос на странице:

<p>Результаты поиска по запросу: " <?php the_search_query() ?> ".</p>

Код the search query: wp-includes/general-template.php WP 4.9

<?php
function the_search_query() {
	/**
	 * Filters the contents of the search query variable for display.
	 *
	 * @since 2.3.0
	 *
	 * @param mixed $search Contents of the search query variable.
	 */
	echo esc_attr( apply_filters( 'the_search_query', get_search_query( false ) ) );
}

Cвязанные функции

Из раздела: Другие функции темы

the_search_query 15 комментариев
Полезные 1 Вопросы 1 Все
  • Фёдор cайт: mongvo.com.ua

    Уважаемый автор, возможно немного не в тему, но никак не могу побороть ошибку... После того как в форме поиска набрать любой запрос, "плывет" верстка! WordPress как положено переадресовывает на страницу search.php но отображается все коряво и шаблон уезжает куда то в правую сторону... Уже весь интернет облазил, видимо ошибка довольно таки редкая. Может подскажите чего.
    P.S. Вот форма поиска

    <form method="get" name="searchform" id="searchform" action="<?php bloginfo('url'); ?>" onSubmit="if(searchform.s.value == '') return false;">
    	<input type="text" name="s" id="s" class="search animate" placeholder="Введите название растения..." value="<?= wp_specialchars($s, 1); ?>" />
    </form>

    Буду очень благодарен за помощь!

    1
    Ответить2.9 года назад #
    • Kama4660

      На странице результатов поиска плывет? Если да, то в теме есть файл search.php в нем html код корявый, где-то может тег не закрывается... сравните структуру с файлом темы где нормально отображается.

      1
      Ответить2.9 года назад #
      • Фёдор cайт: mongvo.com.ua

        Спасибо, разобрался smile Вот это вот все ломало:

        <body <?php body_class(); ?>>

        Заменил на это:

        <body>

        и все встало на свои места smile

        Ответить2.9 года назад #
  • Дамир @

    А какую тз этих функции
    get_search_query()
    the_search_query()

    правильней использовать, в коде формы поисковой строки
    input type="text" value="" name="s" id="s"

    И как они защищают от XSS атак? Т.е. без этих функций WP будет под угрозой?

    1
    Ответить2.3 года назад #
    • Kama4660

      Можно использовать любую функцию, но удобнее

      <?php the_search_query() ?>

      Они отличаются: get_search_query() - возвращает результат, а the_search_query() - выводит сразу на экран.

      Да, они зачищают от XSS атак, тем что перед выводом результата прогоняют его через функцию esc_attr(). Можно не использовать эти функции, а вручную прогнать через esc_attr().

      Ответить2.3 года назад #
  • ivan @

    а можно ли сделать, чтобы в теме на определенных страницах с поиском результаты выводились как через search.php так и через другой шаблон. например если осуществлять поиск с главной страницы то результаты выходят через search.php а если с какой-нибудь другой, то уже другой шаблон вывода результатов был... ?

    1
    Ответить1.8 года назад #
    • Сергей

      Поддерживаю!!!
      Очень даже актуальный вопрос, в сети так и не смог найти адекватный ответ.

      Думаю многие проекты требуют разных шаблонов вывода результатов поиска.

      Может подскажете?

      Ответить1.5 года назад #
    • Kama4660

      Определяйте откуда пришел запрос через $_SERVER['HTTP_REFERER'] и на основе результата изменяйте основной запрос с помощью pre_get_posts

      Ответить1.5 года назад #
      • Сергей

        Вот рабочий вариант, может кому пригодится!

        function template_chooser( $template ){    
        	$post_type = get_query_var('post_type');
        
        	if( is_search() && $post_type == 'Название-типа-записи' ){
        		return locate_template('название-шаблона.php');
        	}
        
        	return $template;   
        }
        add_filter('template_include', 'template_chooser');
        Ответить1.5 года назад #
        • Kama4660

          Тут надо пояснить, чтобы не путались, что - это разный вывод результатов поиска для разных типов записей: для каждого создается свой файл-шаблон вывода, наподобие search.php.

          Но это не совсем то, что спрашивал ivan...

          Спасибо за комментарий!

          Ответить1.5 года назад #
  • campusboy1946 cайт: www.youtube.com/c/wpplus

    Есть механизмы у WP, чтобы подсвечивать найденные слова по поисковой фразе? Без плагина, имею в виду. В каталоге функций не попалось ничего подобного. Вот так:

    Ответить1.1 года назад #
    • campusboy1946 cайт: www.youtube.com/c/wpplus

      Всё, нашёл решение:

      <?php
        $excerpt = get_the_excerpt();
        $keys = explode(" ",$s);
        $excerpt = preg_replace('/('.implode('|', $keys) .')/iu', '<strong class="search-excerpt">\0</strong>', $excerpt);
        echo $excerpt;
      ?>
      Ответить1.1 года назад #
    • Kama4660

      Вот моя старая стать про такое: подсветка результатов поиска.

      Твой код слишком простой: вхождения внутри тегов не учитывает, спецсимволы регулярных выражений не экранирует, разделяет на слова примитивно, лучше взять готовое разделение от ВП - там всякие предлоги вырезаются и т.д...

      Ответить1.1 года назад #
      • campusboy1946 cайт: www.youtube.com/c/wpplus

        На том Богом забытом проекте и простого кода было достаточно. Но раз есть круче, то будет юзать круче! Спасибо drinks

        Ответить1.1 года назад #
  • Артём @

    Добрый день, бьюсь уже который день над одним вопросом по поводу поиска в WP.
    Решил как всегда обратиться к вам, может вы поможете. Есть стандартный поиск:

    <form role="search" class="sidebar-searchform" method="get" action="http://site.ru/">
    <input class="sf-type" name="post_type" type="hidden" value="product">
    <input class="sf-s" name="s" type="text" value="<?php the_search_query(); ?>" placeholder="Введите номер">
    <input class="sf-searchsubmit" type="submit" value="">
    

    Задача стоит такая: при вводе пользователем запроса, нужно чтобы изменялся перед отправкой "GET", а именно удалялись все точки, запятые и тире из запроса. И именно не до (запретить ввод этих символов не подходит), а после того как человек нажал "Поиск".
    Осталась только надежда на вас(((
    Спасибо огромное

Здравствуйте, !

Ваш комментарий