Пользовательский Поисковый Запрос
Я хочу настроить пользовательскую страницу поиска, которая делает следующее:
Пользователь отмечает несколько элементов в форме, которые он хотел бы видеть в результатах поиска (по сути, выбирая из списка тегов).
Возвращаются результаты, соответствующие всем выбранным тегам (используя AND, а не OR).
Конкретный пример:
Вернуть все записи в категории "Area", где теги = "elementary school" И "park"
- Нужно ли давать моей поисковой форме какое-то особое название?
- На странице результатов поиска, как мне написать пользовательский запрос, чтобы он получал все записи в категории Area и имел все теги, которые пользователь выбрал в поисковой форме?

1) Вы можете использовать шаблоны search.php
и searchform.php
в качестве отправной точки. Создание страницы поиска в Codex
2) Что касается пользовательского запроса, вы можете использовать хук pre_get_posts
, чтобы проверить, находитесь ли вы на странице поиска, затем получить ваши значения из $_GET
и соответствующим образом изменить запрос. Справочник по действиям - pre_get_posts
В интернете есть множество руководств и вопросов на эту тему, которые могут вам помочь. Некоторые из них простые, а другие более сложные. Вам придется провести настоящее исследование, чтобы достичь желаемого результата. Надеюсь, это поможет!

Для создания пользовательского поиска вам понадобятся следующие элементы ввода в HTML. Вы можете использовать атрибуты name и value для передачи данных в URL.
<input type="hidden" class="category" name="category_name" value="recording">
<input type="hidden" class="type" name="post_type" value="post">
<input type="text" class="search-bar" id="global-search"><button class="search-submit" type="submit" id="search-submit">
Затем в файле скриптов вам нужно будет сформировать URL.
// обновляем тип поиска
let type = $('input.type').val();
if(type === 0 || type == undefined){
type = "";
}
// обновляем категорию поиска
let category = $('input.category').val();
if(category === 0 || category == undefined){
category = "";
}
// формируем поисковый запрос
keyword = '/?s=' + $(this).val() + '&post_type=' + type + '&category_name=' + category;
$('.search-keyword').attr('data-target','/cimuk' + keyword);
$('.search-keyword .label').text('Search for ' + '"' + $(this).val() + '"');
// вызываем эту функцию при отправке или нажатии Enter
function goKeyword(){
window.location.href = $('.search-keyword').data('target')
}
Затем вы можете добавить этот фильтр в functions.php. Он будет получать переменные из URL и передавать их в поисковый запрос.
// Фильтр для типа записей в поиске
function mySearchFilter($query) {
$post_type = $_GET['post_type'];
$category = $_GET['category_name'];
if (!$post_type) {
$post_type = 'any';
}
if (!$category){
$category = null;
}
if ($query->is_search) {
$query->set('post_type', $post_type);
$query->set('category_name', $category);
};
return $query;
};
// Добавляем фильтр
add_filter('pre_get_posts','mySearchFilter');
Результаты будут загружаться в вашем файле search.php
