Поиск по нескольким пользовательским типам записей и страницам

22 мар. 2011 г., 18:26:30
Просмотры: 14.8K
Голосов: 10

Я использую метод 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;
}
0
Все ответы на вопрос 3
3
19

изменить

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

на

<input type="hidden" name="post_type[]" value="software" />
<input type="hidden" name="post_type[]" value="books" />

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

22 мар. 2011 г. 19:05:38
Комментарии

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

Zach Shallbetter Zach Shallbetter
22 мар. 2011 г. 19:09:26

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

t31os t31os
22 мар. 2011 г. 19:20:33

Моя ошибка, он работает вместе с фильтром из предыдущего вопроса пользователя, проигнорируйте предыдущий комментарий.

t31os t31os
22 мар. 2011 г. 19:25:07
1

Вы можете сделать так, чтобы переключаться между конкретным типом записей и любыми..

<input type="hidden" name="post_type" value="software" />
<label for="post_type">Искать везде</label>
<input type="checkbox" name="post_type" value="any" />

Если флажок не отмечен, поиск будет выполняться по указанному типу, если отмечен - по любым типам записей..

22 мар. 2011 г. 19:30:10
Комментарии

Это просто дополнительный совет в дополнение к ответу Bainternet. ;)

t31os t31os
22 мар. 2011 г. 19:30:44
0

У меня сработало такое решение (аналогичное 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');
27 февр. 2019 г. 22:18:03