Я пытаюсь создать страницу результатов поиска для пользовательского типа сообщения. Это - код, который я использую:
$s = $_GET['s'];
$args = array(
'post_type' => 'companies',
's' => $s
);
query_posts($args);
if ( have_posts() ) :
....results.....
endif
Проблема состоит в том, что добавление "s" параметра в query_posts () дает мне нулевые результаты, каково значение "s". Кажется, что целый поисковый механизм не работает вообще. Какие-либо предложения?
Лучшим способом я нашел для поиска, пользовательские типы сообщения, добавляет поле ввода как это к поисковой форме:
<input type="hidden" name="post_type" value="post-type-name" />
Этот вход может быть переключателем также, для выбора различных типов сообщения. Просто удостоверьтесь имя, которое это передало, соответствует строке типа заказной почты. Оставьте значение, незаполненное в переключателях для 'поиска все'.
Это будет добавлено к URL как строка запроса и будет обработано WordPress на странице с результатами поиска без любой дополнительной работы с Вашей стороны.
Другими словами - Вы не должны должны быть использовать query_posts()
вообще. На самом деле обычно сохраненное мнение многих разработчиков здесь - то, что Вы никогда не должны использовать query_posts()
для чего-либо как существуют лучшие и более эффективные способы сделать все, что это делает.
Вы не должны использовать $_GET['s']
непосредственно как этот, и Вы определенно не должны использовать query_posts
, хотя я понимаю использование его для тестирования.
Если Вы собираетесь создать свой собственный поисковый механизм таким образом, то необходимо работать $_GET['s']
через urldecode()
функционируйте сначала, чтобы удостовериться, что это не содержит странные данные, которые Вы не могли бы ожидать и который мог испачкать Ваш поиск.
Реалистично, просто добавление post_type к поисковой форме заставит его искать тот тип сообщения автоматически, Вы не должны делать своего собственного вызова query_posts. Единственная вещь, оставленная сделать, состоит в том, чтобы удостовериться, что у Вас есть корректный post_type (это - "компании", правильно?) и удостоверяться, что на самом деле существует содержание, содержащее независимо от того, что Вы ищете.
Поиск хорошо работает с пользовательскими типами сообщения. Нет ничего специального или определенного, которое должно быть сделано, чтобы заставить его работать.
Удостоверьтесь, что тип сообщения является открытым типом или не имеет набора флага "exclude_from_search" для него.
Сначала избегайте 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 имеет тот критерий поиска.
Возможно, в header.php файле Вы используете query_post () функция. Та функция будет ясна вся строка запроса, та причина, Ваш поиск не делает работы.
Необходимо изменить функцию для получения сообщения.
решенный здесь: http://thinhseven.com/wordpress-search-do-not-working/
search.php
, право? – SickHippie 02.07.2012, 19:16