Отображение всех результатов поиска
Быстрый, но не самый оптимальный способ - снова использовать query_posts
, что удваивает количество запросов к базе данных.
<?php if (have_posts()) : ?>
<?php query_posts('showposts=999'); ?>
Лучше добавить этот код в functions.php
, изменяя исходный запрос перед его выполнением:
function change_wp_search_size($query) {
if ( $query->is_search ) // Убеждаемся, что это страница поиска
$query->query_vars['posts_per_page'] = 10; // Замените 10 на нужное количество отображаемых записей
return $query; // Возвращаем изменённые параметры запроса
}
add_filter('pre_get_posts', 'change_wp_search_size'); // Подключаем нашу функцию к фильтру запросов
Если нужно отобразить неограниченное количество записей, используйте значение -1
.

showposts
устарел, используйте posts_per_page
. В любом случае первый пример не будет работать - он проигнорирует поисковый запрос и просто покажет последние 999 записей. Вам нужно объединить его с текущим запросом (см. Кодекс). Второй ответ намного лучше, и, как отмечает @WouterB, позволяет избежать повторного запроса к базе данных.

Спасибо @Stephen Harris, я скопировал первый пример из очень старого блога, а потом действительно понял, что на более новом сайте использовал второй вариант. Не вдавался в подробности.

Спасибо Wouter, это работает! Я также использую этот код для отображения количества результатов global $wp_query;
$total_results = $wp_query->found_posts;
echo $total_results;
, но теперь он всегда показывает 0.

Пожалуйста, не предлагайте использование query_posts()
, даже в качестве "быстрого и грязного" решения.

Попробуйте http://wordpress.org/extend/plugins/custom-post-limits/. Этот плагин позволяет устанавливать индивидуальные ограничения на количество записей для различных типов результатов, таких как поиск, категории, метки, архивы, авторские страницы, страницы пагинации и другие, без необходимости создания шаблонов страниц или пользовательских циклов.
