Как вывести разное количество записей в WordPress

wplogo.gifУ 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!

Похожие записи:

9 комментариев

  1. Наталия | 30.05.2014

    Здравтствуйте, Игорь.
    Подскажите, пожалуйста, как можно закрыть от поиска внутри сайта отдельные страницы (page)? Вот есть, например, на странице меню «Контакты» слово «почта», и при наборе в окне поиска этого слова выдается результат — страница «Контакты» в виде записи блога… ужас, короче.
    Помогите, пожалуйста.
    Заранее спасибо.

  2. Здравствуйте, Наталия! К сожалению, так работает поиск в wp, здесь ничего не сделаешь.

  3. onlintv | 20.07.2014

    Да иной раз очень не удобно, спасибо за совет попробовал все работает!

  4. Вэлкам!

  5. Алексей | 30.10.2015

    Использовал ваш метод все получилось в определенной рубрики вывожу 8 постов в остальных по 5 А вот на странице ВСЕ ЗАПИСИ (список всех статей по рубрикам) В той рубрике где указал чтобы выводились 8 постов выводятся только 8 записей все остальные в ней не видны Как это можно поправить?

  6. Лариса | 14.11.2015

    Игорь,у вас на сайте много полезного. Спасибо .. буду заходить.

  7. Лариса, вэлкам! :)

  8. Вадим | 05.03.2017

    Здравствуйте. Почему выводятся только 4 поста. Остальные вообще непонятно где. Это от шаблона зависит?

  9. Игорь Квентор | 05.03.2017

    Здравствуйте, Вадим! Не совсем понятен ваш вопрос. Выводятся 4 поста после добавления этого когда, или вообще?

Оставить комментарий: