Показывать разное количество сообщений на странице в зависимости от контекста (например, домашняя страница, поиск, архив)


В Настройках чтения есть место для установки количества показываемых сообщений, которое влияет на количество сообщений, показываемых во всех контекстах. Вместо этого я хотел бы показать определенное количество сообщений на главной странице и другое количество сообщений на таких страницах, как архив, результаты поиска и т. Д.

reading-settings-blog-pages-show-at-most-per-page

Я понимаю, что мог бы сделать это, отредактировав файлы тем и изменив там параметры запроса, но я бы предпочел иметь более легкий доступ к простой странице настроек. Долгое время некоторое время назад я наткнулся на плагин, который сделал это, но сейчас я не могу его найти.

Кто-нибудь знает плагин для этого или даже функцию, которую я мог бы добавить functions.php чтобы сделать то же самое?

Author: Jeff Atwood, 2010-08-11

4 answers

Я считаю, что лучший способ сделать это в плагине - запустить следующий пример функции при обнаружении крючка действия pre_get_posts. Объект $wp_query доступен, то есть ваши условные теги доступны, но до того, как WordPress получит сообщения, это означает, что вы изменяете параметры запроса до запуска первого запроса, а не добавляете второй запрос, как при использовании query_posts() в файле темы.

function custom_posts_per_page($query) {
    if (is_home()) {
        $query->set('posts_per_page', 8);
    }
    if (is_search()) {
        $query->set('posts_per_page', -1);
    }
    if (is_archive()) {
        $query->set('posts_per_page', 25);
    } //endif
} //function

//this adds the function above to the 'pre_get_posts' action     
add_action('pre_get_posts', 'custom_posts_per_page');
 24
Author: kevtrout, 2013-12-11 20:41:54

Вы можете выполнить пользовательский цикл, используя query_posts, и указать количество записей с помощью is_home, is_archive и т.д.

Просто простая инструкция if вместе с query_posts

 0
Author: chrismccoy, 2010-08-11 20:07:58

К добавлению к этому вопросу. Кто-нибудь знает, как определить post_per_page для этой функции функция custom_posts_per_page($запрос), если добавить новую страницу в index.php вот так:

<?php
if ($_GET['new'] == 1) 
{
    include ( TEMPLATEPATH . '/newpage.php' );
    exit;
}
?>
 -1
Author: glazsasha, 2011-01-20 08:56:50

Я понимаю, что мог бы сделать это, отредактировав файлы тем и изменив там параметры запроса, но я бы предпочел иметь более легкий доступ к простой странице настроек.

В интересах полноты я обнаружил, что query_posts в сочетании с $query_string конкатенация работает хорошо.

Я поместил этот код в index.php (в моей теме нет category.php)...

<?php 
if (!is_front_page()) { 
    query_posts($query_string . "&posts_per_page=20"); 
}
?>

Конечно, то, что мы здесь делаем, - это изменение внутренней строки запроса цикла, переопределение количества сообщений по умолчанию на странице.

Это удобно для предоставления меньшего списка сообщений на главной странице, где я показываю полные сообщения, и гораздо большего списка сообщений повсюду (категории, по дате и т. Д.), Где я показываю только резюме сообщений.

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

 -1
Author: Jeff Atwood, 2011-07-06 23:35:08