Как вывести разное количество записей в WordPress
У WordPress есть одно очень неудобное свойство – вывод количества записей везде одинаков. Хоть на главной странице, хоть в архиве, хоть в поиске. Устанавливается это количество в настройках в разделе Чтение один раз, и никуда от этого не денешься.
Оно бы все и ничего, но иногда такое положение вещей раздражает.
Например, у меня на главной выводится 5 постов с таким расчетом, чтобы общая длина ленты примерно была равна длине сайдбара со всеми его виджетами, рекламой и пр. В рубриках же, как известно, выводятся короткие анонсы постов. А ведь сайдбар остался такой же длинный, как и был. Получается эдакая куцая урезанная страница с кучей пустого пространства.
Можно, конечно, выводить в рубриках не анонс, а полный вариант статей, но это не слишком удобно, да и поисковики могут посчитать, что слишком до фига дублирующих страниц на сайте.
Есть более простое и элегантное решение. В код файла functions.php шаблона нужно добавить следующий код (до закрывающего тега ?>)
function custom_posts_per_page($query){
if(is_home()){
$query->set('posts_per_page',5);
}
if(is_archive()){
$query->set('posts_per_page',10);
}
if(is_search()){
$query->set('posts_per_page',-1);
}
}
add_action('pre_get_posts','custom_posts_per_page');
Здесь, как видите, на главной странице (home) будет выводиться 5 постов, на странице архива 10, а на странице поиска все посты (значение -1). Разумеется, эти значения можно менять, на ваше усмотрение.
Код можно упростить. Например, мне без разницы, сколько постов будет на странице поиска, а важно только количество постов в рубриках. Количество же постов на главной будет по-умолчанию браться из настроек блога. Поэтому я использовал только часть кода:
function custom_posts_per_page($query){
if(is_archive()){
$query->set('posts_per_page',-1);
}
}
add_action('pre_get_posts','custom_posts_per_page');
То есть, на странице архива у меня выводятся все посты из конкретной рубрики. Кроме того, я вообще убрал вывод текста поста и оставил только заголовки. Посмотреть, как это выглядит, вы можете на моем блоге Websovet.com, покликав по рубрикам.
Enjoy!
Здравтствуйте, Игорь.
Подскажите, пожалуйста, как можно закрыть от поиска внутри сайта отдельные страницы (page)? Вот есть, например, на странице меню «Контакты» слово «почта», и при наборе в окне поиска этого слова выдается результат — страница «Контакты» в виде записи блога… ужас, короче.
Помогите, пожалуйста.
Заранее спасибо.
Здравствуйте, Наталия! К сожалению, так работает поиск в wp, здесь ничего не сделаешь.
Да иной раз очень не удобно, спасибо за совет попробовал все работает!
Вэлкам!
Использовал ваш метод все получилось в определенной рубрики вывожу 8 постов в остальных по 5 А вот на странице ВСЕ ЗАПИСИ (список всех статей по рубрикам) В той рубрике где указал чтобы выводились 8 постов выводятся только 8 записей все остальные в ней не видны Как это можно поправить?
Игорь,у вас на сайте много полезного. Спасибо .. буду заходить.
Лариса, вэлкам! :)
Здравствуйте. Почему выводятся только 4 поста. Остальные вообще непонятно где. Это от шаблона зависит?
Здравствуйте, Вадим! Не совсем понятен ваш вопрос. Выводятся 4 поста после добавления этого когда, или вообще?