Добрый день, @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) и выбираете пресет “Искать только в категории” – имя можно поменять в коде.
Теперь при поиске информации через этот виджет (и только через него) будет срабатывать ограничение по категориям.
Надеюсь, удалось помочь. Спрашивайте, если что-то непонятно.