Если у вас в архитектуре проекта есть собственные типы записей (post_type), или вы не хотите, чтобы в поисковую выдачу попадали страницы (page), тогда у меня для вас есть отличное решение!
Идея заключается в том, чтобы перед запросом к БД поставить условие:
- Мы находимся в публичной части сайта;
- Наш запрос приходит из формы поиска.
В случае соблюдения этих условий мы задаем для $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');
}
Это базовый пример для решения конкретной задачи. Его легко модифицировать и подогнать под похожие задачи.