От того, что для изменения параметров запроса используется хук
pre_get_posts. (можно вставить в functions.php темы)
function search_filter($query) {
if ( !is_admin() && $query->is_main_query() ) {
if ($query->is_search) {
$query->set('posts_per_page', '1' );
}
}
}
add_action('pre_get_posts','search_filter');
А если вызывать query_posts перед циклом, то Вы просто делаете второй запрос поверх основного и его работа нарушается.
перебрасывает на главную страницу
Перебрасывает не на главную, а на 404, у Вас, видимо, просто нет шаблона 404.php в теме.