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