Изложенные решения плохие. Редактирование ядра препятствует возможности обновления установки WordPress - вам придется повторять это изменение каждый раз, когда вы обновляете, что вы должны делать. Другое решение создает ненужную нагрузку на базу данных путем фильтрации результатов после их получения. Лучшее решение:
В файле functions.php вашей темы добавьте новую функцию для записи формы поиска:
function custom_search_form( $form, $value = "Search", $post_type = 'post' ) {
$form_value = (isset($value)) ? $value : attribute_escape(apply_filters('the_search_query', get_search_query()));
$form = '<form method="get" id="searchform" action="' . get_option('home') . '/" >
<div>
<input type="hidden" name="post_type" value="'.$post_type.'" />
<input type="text" value="' . $form_value . '" name="s" id="s" />
<input type="submit" id="searchsubmit" value="'.attribute_escape(__('Search')).'" />
</div>
</form>';
return $form;
}
Теперь, в шаблоне, где вы хотите форму (или в любых созданных вами виджетах, это можно легко зарегистрировать как виджет), это:
<?= custom_search_form( null, 'Search posts', 'post'); ?>
Аргументы могут быть исключены из функции и вызова, но я считаю их полезными. Ключом ко всему этому является скрытый ввод 'post_type', который передает значение в запрос. По умолчанию post
гарантирует, что будут возвращены только сообщения.