Поиск по нескольким пользовательским типам записей и страницам
Я использую метод bainternet для поиска по пользовательским типам записей, и он отлично работает. Однако недавно появилась необходимость возвращать более одного "специфического" типа записи, а также отдельные страницы для раздела поддержки на нашем сайте.
Я думал, что добавление дополнительных скрытых полей сработает, но это не помогло. И я не представляю, как это будет работать со страницами.
Буду благодарен за любую помощь!
В шаблоне:
<form action="http://apollo.website.net/" id="searchform" method="get" role="search">
<div><label for="s" class="screen-reader-text">Поиск:</label>
<input type="text" id="s" name="s" value="">
<input type="submit" value="Искать" id="searchsubmit">
<input type="hidden" name="post_type" value="software" />
</div>
</form>
В functions.php:
/* Кастомные поисковые запросы */
function SearchFilter($query) {
$post_type = $_GET['post_type'];
if (!$post_type) {
$post_type = 'any';
}
if ($query->is_search) {
$query->set('post_type', $post_type);
};
return $query;
}

изменить
<input type="hidden" name="post_type" value="software" />
на
<input type="hidden" name="post_type[]" value="software" />
<input type="hidden" name="post_type[]" value="books" />
мне нужно бежать, но это должно сработать, просто добавьте столько скрытых полей, сколько вам нужно для каждого типа записей

Отлично работает, спасибо! Есть ли способ, чтобы он также возвращал связанные страницы?

Массивы значений на входе не будут работать с методом GET
, я был бы удивлён, если этот код действительно делает то, что вы думаете...

Вы можете сделать так, чтобы переключаться между конкретным типом записей и любыми..
<input type="hidden" name="post_type" value="software" />
<label for="post_type">Искать везде</label>
<input type="checkbox" name="post_type" value="any" />
Если флажок не отмечен, поиск будет выполняться по указанному типу, если отмечен - по любым типам записей..

У меня сработало такое решение (аналогичное Bainternet, но без "[]" после "post_type"):
<input type="hidden" name="post_type" value="photo">
<input type="hidden" name="post_type" value="video">
И чтобы получить конкретный шаблон для результатов поиска на основе типа записи (в файле functions.php):
function search_template_chooser($template) {
global $wp_query;
$post_type = get_query_var('post_type');
if( $wp_query->is_search && $post_type == 'photo' || $wp_query->is_search && $post_type == 'video' ) {
return locate_template('search-media.php');
}
return $template;
}
add_filter('template_include', 'search_template_chooser');
