Показывать разное количество сообщений на странице в зависимости от контекста (например, домашняя страница, поиск, архив)
В Настройках чтения есть место для установки количества показываемых сообщений, которое влияет на количество сообщений, показываемых во всех контекстах. Вместо этого я хотел бы показать определенное количество сообщений на главной странице и другое количество сообщений на таких страницах, как архив, результаты поиска и т. Д.
Я понимаю, что мог бы сделать это, отредактировав файлы тем и изменив там параметры запроса, но я бы предпочел иметь более легкий доступ к простой странице настроек. Долгое время некоторое время назад я наткнулся на плагин, который сделал это, но сейчас я не могу его найти.
Кто-нибудь знает плагин для этого или даже функцию, которую я мог бы добавить functions.php чтобы сделать то же самое?
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');
Вы можете выполнить пользовательский цикл, используя query_posts, и указать количество записей с помощью is_home, is_archive и т.д.
Просто простая инструкция if вместе с query_posts
К добавлению к этому вопросу. Кто-нибудь знает, как определить post_per_page для этой функции функция custom_posts_per_page($запрос), если добавить новую страницу в index.php вот так:
<?php
if ($_GET['new'] == 1)
{
include ( TEMPLATEPATH . '/newpage.php' );
exit;
}
?>
Я понимаю, что мог бы сделать это, отредактировав файлы тем и изменив там параметры запроса, но я бы предпочел иметь более легкий доступ к простой странице настроек.
В интересах полноты я обнаружил, что query_posts
в сочетании с $query_string
конкатенация работает хорошо.
Я поместил этот код в index.php
(в моей теме нет category.php)...
<?php
if (!is_front_page()) {
query_posts($query_string . "&posts_per_page=20");
}
?>
Конечно, то, что мы здесь делаем, - это изменение внутренней строки запроса цикла, переопределение количества сообщений по умолчанию на странице.
Это удобно для предоставления меньшего списка сообщений на главной странице, где я показываю полные сообщения, и гораздо большего списка сообщений повсюду (категории, по дате и т. Д.), Где я показываю только резюме сообщений.
Однако, пожалуйста, обратите внимание, что в отличие от принятого ответа, этот запрос будет выполняться дважды, поэтому это не такое хорошее решение.