Поиск нескольких пользовательских типов записей и страниц
Я использую метод bainternet для поиска пользовательских типов сообщений , и он отлично работает. Однако недавно меня попросили вернуть несколько "конкретных" типов сообщений и, возможно, отдельные страницы для раздела поддержки на нашем сайте.
Я думал, что добавление дополнительных скрытых полей сделает это, но это не сработало. И я понятия не имею, как это будет работать со страницами.
Любая помощь будет признательна!
В шаблон:
<form action="http://apollo.website.net/" id="searchform" method="get" role="search">
<div><label for="s" class="screen-reader-text">Search for:</label>
<input type="text" id="s" name="s" value="">
<input type="submit" value="Search" id="searchsubmit">
<input type="hidden" name="post_type" value="software" />
</div>
</form>
В functions.php :
/* Custom Search Queries */
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;
}
3 answers
Изменение
<input type="hidden" name="post_type" value="software" />
До
<input type="hidden" name="post_type[]" value="software" />
<input type="hidden" name="post_type[]" value="books" />
Мне нужно бежать, но это должно сработать, просто добавьте столько скрытых полей, сколько вам нужно для каждого типа записи
Вы могли бы сделать это так, чтобы переключаться между типом сингулярного набора и любым..
<input type="hidden" name="post_type" value="software" />
<label for="post_type">Search all</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');