Май
21
26

Разное количество записей на страницах блога

Иногда возникает ситуация, когда вы хотите вывести на различных страницах блога разное количество постов – например, на главной по 3, в категориях, допустим, сразу 5. Это может быть вызвано разными факторами – начиная от дизайна блога и заканчивая какими-то личными предпочтениями. Реализовать подобный маневр в  wordpress, причем сразу двумя способами – первый с помощью плагина, а второй с использованием стандартных возможностей системы.

Плагин Different Posts Per Page

Начтем с плагина. На официальном сайте вордпресс он называется cbnet Different Posts Per Page и выполняет единственное действие как раз нужно нам – вывод разного числа постов на страницах категорий, архивов, тегов, главной и многих других. При этом вы можете задавать порядок сортировки при выводе – в сторону уменьшения или увеличения. Круто? – да, возможно, хотя меня лично не сильно впечатляет, и дальше вы поймете почему. Единственная особенность плагина Different Posts Per Page, которая кажется интересной, — возможность вывода различного количества постов для разных категорий.

Итак, для установки плагина Different Posts Per Page нужно скачать архив с официального сайта, разархивировать и залить на ФТП блога в директорию /wp-content/plugins/. Далее в админке WordPress находим модуль и активируем его. После это в меню появится новый пункт для управления настройками.

настройки плагина

Здесь найдете некоторые настройки установленные по умолчанию – для главной страницы, категорий, архивов, тегов и поиска. Чуть ниже есть блок для добавления дополнительных параметров. В первом пункте есть на выбор достаточно много опций – страницы авторов, по дате, времени и т.п. Во втором вы можете выбрать конкретную категорию блога для ограничения, что достаточно интересно.

Использование WP_Query

Почему я говорил, что меня плагин не очень впечатлил. В принципе, все эти хитрые хаки вы можете выполнить самостоятельно через правку файлов шаблона. Недавно я рассказывал в блоге про wordpress цикл (loop), где упоминал также функцию запроса к базе данных query_posts, с помощью которой можно задавать некоторые параметры выборки постов блога. В общем, суть метода – для различных файлов шаблона index.php и archive.php в query_posts нужно добавить требуемое число постов через переменную showposts.

Например, находите в файле index.php код, который делает выборку постов

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>

или запись покороче:

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

После чего заменяете это все на строки:

<?php $top_query = new WP_Query('showposts=3'); ?>
<?php if(have_posts()) : ?>
<?php while($top_query->have_posts()) : $top_query->the_post(); $first_post = $post->ID; ?>

Теперь на главной вы получите вывод 3-х постов, а на остальных страницах будет работать параметр, заданный в настройках блога.

Нюансы WP_Query и плагина Different Posts Per Page

Вообще лично у меня была задача сделать вывод на главной странице блога по 3 поста, на остальных по 5. Проблема реализации через WP_Query заключалась в навигации. Дело в том, что разбиение по 3 поста касалось не только главной страницы, а и все остальных страниц, куда бы вы переходили по ссылкам в навигации на главной (они тоже считаются как home).

навигация в блоге

А это не сильно хорошо соответствовало дизайну. Кстати, если кто-то знает как решить эту проблему с помощью WP_Query пишите в комментариях. Чего я лично только не пробовал, начинался много документации с официального сайта, но до финального результата, увы, так и не дошел. Можно, конечно, отказаться от правки кода и воспользоваться плагином Different Posts Per Page, который представляет выход из этой ситуации. Кроме настроек по умолчанию вы можете добавить некоторые другие «состояния», в том числе и когда пользователь переходит по страницам (Paged). Поэтому я указал для главной (Home) отображение 3  постов, а для любых страниц (Paged) – по 5 (смотрим рисунок 1). Как раз то, что мне и нужно было.

Единственное плагин неправильно считает количество страниц при этом. То есть у меня, например 14 постов, по 3 на страницу для главной и по 5 на остальные. Так вот на главной выводится навигация с 5 страницами – 1,2,3,4,5. Но физически 4 и 5ой не существует, потому что мы выбрали вывод по 5 на всех paged. В общем, тоже вроде бы не совсем красивое решение ссылаться на пустые страницы, которые попадут в индекс, проще вообще убрать навигацию с главной.

P.S. Постовой. Бесплатные русские шаблоны wordpress от группы themebot.ru.
Для автомобильной аудиосистемы выбираем автомагнитолы цена подходящая, качественные.
Пассажирские перевозки: аренда и заказ микроавтобусов москва — отличное обслуживание.

рейтинг Оцените статью:
Ужасная статьяНичего интересногоТак себеНормальноХорошоКлассный постВ закладки!
(голосов - 5, средний балл: 5,60 из 7)
Загрузка...

категория Категории: Плагины; Хаки и секреты;
теги Теги: , , , , .

комментариев 26 к статье “Разное количество записей на страницах блога”

  • cava150   22.05.2010

    Хм, плагин довольно таки интересный!
    А для чего нужен такой вывод сообщений с разным количеством статей?

  • grayhead   08.08.2010

    Полезная штука.
    cava150, у меня, например, на некоторых блогах на главной только 1 пост целиком, а в архивах и поиске по 10 анонсов.

  • Virtual   17.08.2010

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

    Как говорил Козьма Прутков, Зри в корень, то есть в исходник :)

    Вместо $top_query = new WP_Query(‘showposts=3’);

    global $paged, $wp_query;

    $posts_per_home = 2; // количество постов на главной
    $posts_per_page = 8; // количество постов на других страницах

    if( $_GET[‘paged’] > 1 ){
    $showposts = $posts_per_page;
    $offset = ($_GET[‘paged’] — 1) * $posts_per_page — $posts_per_page + $posts_per_home;
    }
    else{
    $showposts = $posts_per_home;
    }

    query_posts(«offset=$offset&paged=$paged&showposts=$showposts»);

    $wp_query->found_posts -= $posts_per_home;
    $wp_query->max_num_pages = ceil($wp_query->found_posts / $posts_per_page) + 1;

  • Tod   02.12.2010

    Virtual, что-то код применить не получилось, матюкается на строку $offset = ($_GET[‘paged’] – 1) ….

    Вообще относительно глюка плагина Different Posts Per Page и количества страниц на главной я таки понял в чем проблема. Страницы у меня выводятся через плагин PageNavi, а для него применяется разбиение на количество страниц как на главной (home), ему то никто не сообщает, что на подстраницах (Paded) совсем другое разбиение.
    Пришлось использовать «код для вывода страниц без плагина», для которого я задал
    $pages = ceil($wp_query->found_posts/8);

  • Virtual   02.12.2010

    >Virtual, что-то код применить не получилось
    Когда я его писал, он точно был работоспособным.

  • Блохин Игорь   07.04.2011

    Огромное спасибо за код! С плагином не захотел возиться, а вот код для главной страницы поменял. Сработало — на главной странице только желаемая одна запись, а на поиске и архиве — столько, сколько я установил в параметре «Чтение».

  • Алексей   27.04.2011

    а у меня плагин со значением для главной страницы = 3 и WP_Query(‘showposts=3’) выводит по три записи на всех страницах, а не только на главной… сижу голову ломаю.

    тема mystique. в ней, на сколько я понял, немного не стандартный вывод пагинации. подскажите, пожалуйста, куда копать, с wp впервые столкнулся

  • Tod   27.04.2011

    Алексей, если я правильно понял, то WP_Query(‘showposts=3′) из шаблона нужно убрать — оно и задает вывод по 3 поста, пусть разбиение на страницы полностью контролирует плагин cbnet Different Posts Per Page.

  • Алексей   27.04.2011

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

    >выводит по три записи на всех страницах, а не только на главной
    здесь я имел ввиду, что, как вы написали:
    «касалось не только главной страницы, а и все остальных страниц, куда бы вы переходили по ссылкам в навигации на главной (они тоже считаются как home)»

    Оказывается у меня тоже пагинация выводится через PageNavi.
    В итоге по вашему совету в нем изменил
    $max_page = $wp_query->max_num_pages;
    на
    $max_page = ceil($wp_query->found_posts/6);
    (6 — число записей на странице)
    Других вариантов не нашел.
    Выводится вроде верно.

    Но ведь получился «быдлокод»! При обновлении все слетит, или другой человек потом будет разбираться — не разберется! Как улучшить-то все это дело? :-)

  • Алексей   27.04.2011

    и да, с плагином выводит все отлично! но вот пагинация удручает

  • ChDamir   25.07.2011

    to Virtual 17.08.2010
    Спасибо! Помогло.

    Бился с постраничным выводом используя плагин wp_pagenavi. Как только не крутил аргументы. Добавлял $query_string. Только с Вашим &offset=$offset&paged=$paged — хоть как-то заработало.

    Один косяк остался — если в параметрах блога стоит число больше, чем posts_per_page, то последние N страниц не находятся (N = параметр_блога / posts_per_page).

  • Geleosan   21.12.2011

    Плагин еще пока не ставил, все надеялся решить вопрос с правкой index.php
    Ситуация ппроще, нужно разбиение на главной и страницах по 5, а в рубриках, как задано в админе.

    Код WP_Query(‘showposts=5’) в index.php выводит по 5 постов на всех страницах, только посты все одинаковые, те что на главной. Навигация идет через Page Navi. Не подскажете, почему так может быть? По идее должны же отображаться другие посты на следующих страницах, у вас так было, и у комментаторов тоже.

  • Geleosan   21.12.2011

    Может кому еще будет полезно.

    Поставил плагин Custom Posts Per Page (он более новый, нежели упомянутый в статье) и настроил там показ количества постов на главной странице и остальных страницах, а так же в рубриках. Как раз то, что надо. Pagi Navi работает нормально, ничего в нем править теперь не надо.

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

  • Руслан   13.07.2013

    Появились ли какие-нибудь способы вывода разное количество записей на страницах блога без плагинов?

  • Tod   14.07.2013

    Руслан, недавно публиковал статью Разное количество записей на странице без плагинов — там найдете один из вариантов (достаточно простых)

  • Бакумур   22.05.2016

    Искал тут что-нибудь по плагину WP-PageNavi. Может, подскажете. В какой-то момент пришлось переустановить сайт и базу. В принципе. все свершилось безболезненно, но, после этого плагин WP-PageNavi вроде показывает кучу страниц записей, вроде переходит на нужную страницу, но там в любом случае оказывается содержимое первой страницы. Если выключить плагин, стандартные «предыдущая» и «следующая страницы» отсутствуют, как класс. :)
    Спасибо заранее.

  • Tod   22.05.2016

    Бакумур, если честно, сложно что-то посоветовать, т.к. никогда проблем с WP-PageNavi не было. Можно попробовать переустановить модуль, удалив его с сайта полностью (не только файлы, но и из БД). Возможно, модуль конфликтует с другим каким-то.

  • bakumur   23.05.2016

    Tod, кое что выяснил: проблема появляется почему-то при использовании вот этого кода:

    Без него все работает ОК
    Фокус в том, что хотел на главной, чтобы не выводились посты определенных категорий. Ан нет, нопасаран)))
    Все равно спасибо, надо было спросить у кого-то, чтобы разобраться.

  • Tod   23.05.2016

    bakumur, код, к сожалению, не сохранился в комментарии. Вообще если править порядок отображения постов, то там есть несколько разных нюансов, в которые нужно вникать. По поводу исключения постов по категории с главной советую плагин Exclude categories.

  • Артур   26.05.2016

    Custom Posts Per Page — этот плагин решает проблему, чтобы на первой странице можно было выводить допустим одно количество постов, а на 2,3 и.т.д. другое количество.

  • Tod   27.05.2016

    Артур, спасибо за подсказку! давно просто не изучал, что там нового по этому вопросу.

  • Николай   18.07.2016

    Здравствуйте, суть проблемы вот в чём. На страницу выводятся превьюшки двух постов, но при нажатие на ссылку «Читать далее…» или заголовок статьи, основной контент не выводиться и внешне на странице ничего не меняется хотя URL изменяется и всё вроде как бы должно работать))

  • Tod   18.07.2016

    Николай, к сожалению, код не вставился в комментарий. Но по описанию похоже, что для «единичной записи» не определен шаблон single.php. Полный текст статьи выводит функция the_content, возможно в установленной теме указан вместо нее the_excerpt. Нужно создать отдельно single.php или править базовый index.php.

  • Олжас   01.09.2016

    Всю статью я не читал, но проблему кажется понял. Попробуй создать отдельный файл, например page-hompage и укажи слаг главной страницы как hompage. Ну и соответствующий контент создай и не забудь указать (например, content-hompage). И можешь исправлять сколько душе угодно

  • Max   09.12.2016

    Полезная статья, спасибо

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

  • Tod   09.12.2016

    Max, возможно нужно задать в коде использование конкретного ID категории (то есть считывать на странице текущий ID, а потом его вставлять в query). Вообще, помнится, там с этой пагинацией все немного запутанно.

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


Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!

Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:

Последние посты
Лучшее в категории
Облако тегов
Скажи свое мнение!

В чем основные плюсы Wordpress?

Посмотреть результаты

Загрузка ... Загрузка ...
Друзья проекта
Последние новости