query_posts () - проблема с “s” параметром

Я пытаюсь создать страницу результатов поиска для пользовательского типа сообщения. Это - код, который я использую:

$s = $_GET['s'];
$args = array(
        'post_type' => 'companies',
        's'         => $s
);
query_posts($args);

if ( have_posts() ) :
....results.....
endif

Проблема состоит в том, что добавление "s" параметра в query_posts () дает мне нулевые результаты, каково значение "s". Кажется, что целый поисковый механизм не работает вообще. Какие-либо предложения?

0
28.06.2012, 23:56
4 ответа

Лучшим способом я нашел для поиска, пользовательские типы сообщения, добавляет поле ввода как это к поисковой форме:

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

Этот вход может быть переключателем также, для выбора различных типов сообщения. Просто удостоверьтесь имя, которое это передало, соответствует строке типа заказной почты. Оставьте значение, незаполненное в переключателях для 'поиска все'.

Это будет добавлено к URL как строка запроса и будет обработано WordPress на странице с результатами поиска без любой дополнительной работы с Вашей стороны.

Другими словами - Вы не должны должны быть использовать query_posts() вообще. На самом деле обычно сохраненное мнение многих разработчиков здесь - то, что Вы никогда не должны использовать query_posts() для чего-либо как существуют лучшие и более эффективные способы сделать все, что это делает.

0
19.02.2020, 23:42
  • 1
    , который был первой вещью, которую я пытался сделать, но это не работало ни один... эта проблема, вызывает меня головная боль –  ktsixit 30.06.2012, 11:59
  • 2
    И Вы делаете это все в search.php, право? –  SickHippie 02.07.2012, 19:16
  • 3
    Моя форма помещается в sidebar.php. Только результаты отображены в search.php. полезные ссылки –  ktsixit 04.07.2012, 15:57

Вы не должны использовать $_GET['s'] непосредственно как этот, и Вы определенно не должны использовать query_posts, хотя я понимаю использование его для тестирования.

Если Вы собираетесь создать свой собственный поисковый механизм таким образом, то необходимо работать $_GET['s']через urldecode() функционируйте сначала, чтобы удостовериться, что это не содержит странные данные, которые Вы не могли бы ожидать и который мог испачкать Ваш поиск.

Реалистично, просто добавление post_type к поисковой форме заставит его искать тот тип сообщения автоматически, Вы не должны делать своего собственного вызова query_posts. Единственная вещь, оставленная сделать, состоит в том, чтобы удостовериться, что у Вас есть корректный post_type (это - "компании", правильно?) и удостоверяться, что на самом деле существует содержание, содержащее независимо от того, что Вы ищете.

Поиск хорошо работает с пользовательскими типами сообщения. Нет ничего специального или определенного, которое должно быть сделано, чтобы заставить его работать.

Удостоверьтесь, что тип сообщения является открытым типом или не имеет набора флага "exclude_from_search" для него.

2
19.02.2020, 23:42

Сначала избегайте query_post это - страшно плохая практика, и никогда не захватывайте' через GET. Считайте это перед продолжением:

http://www.slideshare.net/andrewnacin/you-dont-know-query-wordcamp-netherlands-2012

Это - набор fo слайды для презентации, которая будет преподавать Вам корректный способ сделать и изменить запросы в WordPress, и это записано Базовым разработчиком. Это нужно считать существенным чтением для любого работающего с WordPress, и это сэкономит Вам время и деньги.

Назад к поисковой проблеме. URL, такой как это сделает то, чего Вы требуете:

example.com/?s=searchterm&post_type=companies

Таким образом, проблема состоит в том, как копировать ее в поисковой форме. Ваша поисковая форма должна быть чем-то как:

<form action="<?php home_url(); ?>" method="get">
    <input type="text" name="s" /><?php /* your search term */ ?>
    <input type="hidden" name="post_type" value="companies" /><?php /* set post type */ ?>
    <input type="submit" /><?php /* submit button */ ?>
</form>

Вы не должны делать модификации к search.php поскольку WordPress обработает ту часть для Вас внутренне.

Необходимо также проверить, что у Вас есть сообщения типа 'компании' для поиска, и что критерий поиска там. Создайте тест, где Вы ищете X и развешиваете шоу Y, и Вы знаете для того, что Y имеет тот критерий поиска.

1
19.02.2020, 23:42

Возможно, в header.php файле Вы используете query_post () функция. Та функция будет ясна вся строка запроса, та причина, Ваш поиск не делает работы.

Необходимо изменить функцию для получения сообщения.

решенный здесь: http://thinhseven.com/wordpress-search-do-not-working/

0
19.02.2020, 23:42
  • 1
    Большой иметь Вас здесь в WPSE. Лучше отправить биты соответствующих норм здесь, поскольку ссылки могли бы быть удалены в будущем. Это затем представляет ответ, бесполезный без контекста. Это не проблема, чтобы заключить решение в кавычки и процитировать его со ссылкой. –  Brian Fegter 03.10.2012, 14:15
  • 2
    Так же, как сказанный Мозг ссылка является битой. –  marek.m 14.09.2017, 15:59

Теги

Похожие вопросы