Как ограничить область поиска определенными типами записей

Код, определяющий область поиска - с его помощью можно указать, какие типы записей в нем участвуют, включая или исключая как стандартные, так и произвольные типы записей.
👍 Научим бесплатно правильно создавать сайты на WordPress. Подробнее →

В последнее время вебмастеры стали активно использовать дополнительные типы записей, не ограничиваясь только постами и страницами, а добавляя к ним еще и записи портфолио, анонсы, события. Эти типы записей взяли на вооружение разработчики тем, активно включая подобные структуры в свои разработки. Произвольные типы записей используются не случайно, а в тех случаях, когда нужно отделить одну информацию от другой, а может быть и вовсе изолировать ее от общего потока. Поэтому часто встает вопрос контроля за областью поиска — нужно включать/исключать различные типы записей при поиске информации в блоге. Это можно сделать с помощью дополнительных плагинов, но я предпочитаю чистый код, внедренный в тему.

Для того, чтобы определить область поиска, можно использовать встроенный в WordPress фильтр pre_get_posts, с помощью которого можно указать типы записей, отправляемые на обработку функции поиска:

function tp_search_filter( $query ) {
    if ( $query->is_search ) {
        $query->set( 'post_type', array('post','page') );
    }
    return $query;
}
add_filter('pre_get_posts','tp_search_filter');

Этот код нужно добавить в файл functions.php используемой вами темы. Типы записей определяются массивом:

array('post','page')

В данном примере область поиска ограничена постами и страницами — только эти типы записей появятся среди результатов. Если вам нужно добавить другие типы записей, например, portfolio и news, то нужно расширить области — добавить эти пользовательские типы записей в список разрешенных записей для поиска:

array('post','page','portfolio','news')
Создай свой первый сайт на WordPress

tiaurus

Автор n-wp.ru — блога о WordPress для новичков.

Оцените автора
Добавить комментарий

  1. Дима

    Подскажите, если нужен селектор в поиске? как это реализовать? К примеру:
    Есть 3-и раздела
    1) Маркет(woocommerce)
    2)Новости
    3)Обьявления(awpcp плагин)

    Если пользователь клацает маркет, то поиск только по вукомерсу, если новости то поиск только по записям, если обьявления то поиск по плагину awpcp. Сижу голову ломаю, кучу всего уже перепробовал, ни чего не получается…

    Ответить