Отображение всех результатов поиска

19 мар. 2012 г., 13:53:02
Просмотры: 23.2K
Голосов: 3

Есть ли способ отобразить все результаты поиска на странице search.php? В настоящее время отображается только 10 результатов (как установлено в WordPress settings > general).

0
Все ответы на вопрос 3
5

Быстрый, но не самый оптимальный способ - снова использовать 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.

19 мар. 2012 г. 14:06:29
Комментарии

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

Stephen Harris Stephen Harris
19 мар. 2012 г. 14:33:24

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

WouterB WouterB
19 мар. 2012 г. 14:42:57

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

Andycap Andycap
20 мар. 2012 г. 19:25:00

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

s_ha_dum s_ha_dum
14 нояб. 2015 г. 16:26:01

Для отображения всех записей, как указано в вопросе, вы можете изменить значение 10 на -1: $query->query_vars['posts_per_page'] = -1;

allicarn allicarn
1 июн. 2018 г. 06:03:00
1

Довольно просто: -1 отменяет ограничение. Просто объедините стандартный запрос с вашими пользовательскими аргументами.

global $wp_query;
query_posts( 
    wp_parse_args(
         $wp_query->query
        ,array( 'posts_per_page' => -1 )
    )
);
19 мар. 2012 г. 18:18:02
Комментарии

Спасибо, kaiser, мне больше нравится другой метод без удвоения запросов. В любом случае, этот тоже сработает.

Andycap Andycap
20 мар. 2012 г. 19:27:10
1

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

19 мар. 2012 г. 15:09:05
Комментарии

На этот раз я предпочитаю получить результат без плагина. Однако я уже использовал тот, который вы предложили, и он очень полезен для настройки результатов поиска.

Andycap Andycap
20 мар. 2012 г. 19:29:44