Поиск в определенной рубрике записей

Добрый день, @aliksanders

Если рубрика – это стандартная категория WordPress, то нужно в запрос WP_Query() добавить параметр “cat” => “<ID вашей категории>”. Допускается указывать несколько ID через запятую. Вложенные категории также будут использованы при поиске.

Также можно вместо параметра использовать “category_name“, тогда в качестве значения нужно будет указать не ID, а slug нужной категории.

Вот тут есть более подробное описание: https://wp-kama.ru/function/wp_query#categories

Теперь вопрос – как именно добавить этот параметр в запрос. Если вы хотите ограничить категорией главный поиск (тот, что обычно запускается вводом текста в виджет поиска на сайте), то можно перехватить хук pre_get_posts и в нём добавить параметр. Код будет примерно такой (вы можете добавить этот код в начало функции functions.php вашей темы:

add_action('pre_get_posts', function(&$wpq)

if ($wpq->is_search && $wpq->is_main_query())
// Modify search query
$wpq->set('cat', '4,5,6'); // Тут задаём нужные ID категорий

);

Этот подход плох тем, что вы навсегда ограничиваете поиск, пользователи просто не смогут искать в других категориях.

Всё, описанное выше – это вообще-то стандартные функции WP_Query().

Однако, если вы хотите сделать некий специфический поисковый виджет (отличный от главного виджета), при вводе информации в который поиск бы ограничивался, то тут придёт на помощь WP Fast Total Search, точнее, его Live Search Widget и возможность задавать пресеты.

Добавляем вот такой код (интерфейс для данной функции ещё не готов):

add_action ('init', function()
(!$wpfts_core))
return;

if (method_exists($wpfts_core, 'AddWidgetPreset'))
// Добавляем новый пресет
$wpfts_core->AddWidgetPreset('preset1', array(
'title' => 'Искать только в категории',
'filter' => 'preset1',
'results_url' => '/',
'autocomplete_mode' => 1, // Это включит "живой" поиск
));

, 255);

// Этот хук активирует функционал пресета
add_action('wpfts_pre_get_posts', function(&$wpq, $wdata)

if ($wdata['id'] == 'preset1')
// Добавляем параметры в поиск
$wpq->set('cat', '1,3,4');

, 20, 2);

Выглядит страшновато, но должно работать.

Далее вы где-то размещаете новый виджет из списка виджетов (ищите WPFTS :: Live Search) и выбираете пресет “Искать только в категории” – имя можно поменять в коде.

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

Надеюсь, удалось помочь. Спрашивайте, если что-то непонятно.

 

This site will teach you how to build a WordPress website for beginners. We will cover everything from installing WordPress to adding pages, posts, and images to your site. You will learn how to customize your site with themes and plugins, as well as how to market your site online.

Buy WordPress Transfer