Пользовательский Поисковый Запрос

8 апр. 2014 г., 18:18:22
Просмотры: 36.3K
Голосов: 6

Я хочу настроить пользовательскую страницу поиска, которая делает следующее:

Пользователь отмечает несколько элементов в форме, которые он хотел бы видеть в результатах поиска (по сути, выбирая из списка тегов).

Возвращаются результаты, соответствующие всем выбранным тегам (используя AND, а не OR).

Конкретный пример:

Вернуть все записи в категории "Area", где теги = "elementary school" И "park"

  1. Нужно ли давать моей поисковой форме какое-то особое название?
  2. На странице результатов поиска, как мне написать пользовательский запрос, чтобы он получал все записи в категории Area и имел все теги, которые пользователь выбрал в поисковой форме?
6
Комментарии

Много путаницы в том, что я прочитал. Я видел, что нужно использовать что-то вроде query_posts('cat=32&tag=hs1+hs1&showposts=5');, а также видел, что нужно использовать что-то вроде `<?php

$the_query = new WP_Query( 'cat=Neighborhood&tag=elementary school+park' );

// Цикл while ( $the_query->have_posts() ) : $the_query->the_post();
the_title(); the_content(); endwhile;

wp_reset_postdata();

?>`

Peanut Peanut
8 апр. 2014 г. 18:47:22

А также видел, что нужно использовать что-то вроде $query = array ( 'paged' => 1, 'posts_per_page' => '5', 'offset' => 0, 'post_status' => 'publish', 'orderby' => 'date', 'order' => 'DESC', 'post_type' => array ( 'post' => 'post', ), 'cat' => '35', 'tag__and' => array ( 0 => 36, 1 => 39, ), ); ... в общем, я совершенно запутался.

Peanut Peanut
8 апр. 2014 г. 18:47:38

@Peanut Два замечания: Если у вас есть дополнительная информация, пожалуйста, вносите [правки], а не комментарии. Не все читают комментарии, и они время от времени удаляются. Во-вторых, пожалуйста, используйте форматирование (обратные кавычки) для кода в комментариях. Рядом с формой комментария есть ссылка "помощь". Спасибо.

kaiser kaiser
8 апр. 2014 г. 18:58:15

Используйте WP_Query и его параметр s, не забудьте вызвать wp_reset_postdata после завершения работы с этим запросом :-) Ссылка: https://codex.wordpress.org/Class_Reference/WP_Query#Search_Parameter

jave.web jave.web
20 янв. 2017 г. 14:04:11

Пожалуйста, ознакомьтесь с аналогичным вопросом на stackoverflow https://stackoverflow.com/questions/9523881/how-do-i-modify-search-query-in-wordpress/57786703#57786703

Amit Kumar PRO Amit Kumar PRO
4 сент. 2019 г. 13:42:32

Пожалуйста, проверьте тот же вопрос на stackoverflow https://stackoverflow.com/questions/9523881/how-do-i-modify-search-query-in-wordpress/57786703#57786703

Amit Kumar PRO Amit Kumar PRO
4 сент. 2019 г. 13:43:56
Показать остальные 1 комментариев
Все ответы на вопрос 2
0
11

1) Вы можете использовать шаблоны search.php и searchform.php в качестве отправной точки. Создание страницы поиска в Codex

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

В интернете есть множество руководств и вопросов на эту тему, которые могут вам помочь. Некоторые из них простые, а другие более сложные. Вам придется провести настоящее исследование, чтобы достичь желаемого результата. Надеюсь, это поможет!

8 апр. 2014 г. 18:24:48
0

Для создания пользовательского поиска вам понадобятся следующие элементы ввода в 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

14 нояб. 2019 г. 23:25:36