Поиск только по записям/постам в WordPress

Если у вас в архитектуре проекта есть собственные типы записей (post_type), или вы не хотите, чтобы в поисковую выдачу попадали страницы (page), тогда у меня для вас есть отличное решение!


Идея заключается в том, чтобы перед запросом к БД поставить условие:

  1. Мы находимся в публичной части сайта;
  2. Наш запрос приходит из формы поиска.

В случае соблюдения этих условий мы задаем для $query тот тип записей, который нужно. В нашем случае это post.

if( !function_exists('search_filter') && !is_admin() ) {
  function search_filter($query) {
    if ($query->is_search) {
      $query->set('post_type', 'post');
    }
    return $query;
  }
  add_filter('pre_get_posts', 'search_filter');
}

Это базовый пример для решения конкретной задачи. Его легко модифицировать и подогнать под похожие задачи.


EnglishRussianUkrainian