• Resolved aliksanders

    (@aliksanders)


    Подскажите, как сделать поиск по записям определённой рубрики?

Viewing 3 replies - 1 through 3 (of 3 total)
  • Plugin Author Epsiloncool

    (@epsiloncool)

    Добрый день, @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()
    {
    global $wpfts_core;

    // Проверяем, что плагин WPFTS активен
    if ((!is_object($wpfts_core)) || (!$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) и выбираете пресет “Искать только в категории” – имя можно поменять в коде.

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

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

    Thread Starter aliksanders

    (@aliksanders)

    Да спасибо, сделал первым способом, я знал, как это делается, просто думал что это можно сделать как-то через Ваш плагин. Так-как для поиска на моём сайте мне нужны записи только одной рубрики, а плагин Ваш будет создавать таблицу индекса для всех записей.

    И еще, может вам пригодится, но плагин некорректно работает на PHP 8,2 могу показать Вам ошибку

    Plugin Author Epsiloncool

    (@epsiloncool)

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

    да, если можно, любая информация об ошибках будет крайне ценной.

    Спасибо!

Viewing 3 replies - 1 through 3 (of 3 total)
  • You must be logged in to reply to this topic.