Разное количество записей на страницах блога
Иногда возникает ситуация, когда вы хотите вывести на различных страницах блога разное количество постов – например, на главной по 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. Постовой. Пассажирские перевозки: аренда и заказ микроавтобусов москва — отличное обслуживание.
комментариев 26 к статье “Разное количество записей на страницах блога”
Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!
Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:
- Як сховати відсутні товари в Woocommerce шорткодах та схожих товарах
- Сервіс AdMaven + плагін для монетизації трафіка на WordPress сайтах
- Плагіни для створення стрічки новин з біжучим рядком в WordPress
- Як змінити розміщення кнопки оформлення замовлення в WooCommerce
- Плагін WHWS Display In Stock Products First – відображення товарів в наявності першими
- Підписка MonsterONE: чи варто використовувати цей сервіс у 2023 році? (+5 продуктів, які треба скачати в першу чергу)
- Онлайн генератор ссылок на мессенджеры для WordPress и не только
- WooCommerce (46)
- Безопасность (12)
- Видео (6)
- Виджеты (28)
- Возможности (141)
- Вопрос-ответ (6)
- Начинающим (52)
- Новости (46)
- Оптимизация (23)
- Плагины (246)
- Сервисы (87)
- Хаки и секреты (87)
- Шаблоны (45)
- Плагин WP-PostRatings рейтинга постов в WordPress (5,79 из 7, голосов - 934)
- 5 wordpress плагинов для кнопок социальных закладок (5,24 из 7, голосов - 42)
- Кэширование в wordpress — выбираем лучший плагин для кэширования (5,63 из 7, голосов - 35)
- 50+ лучших плагинов для WordPress сайта (5,71 из 7, голосов - 34)
- Лучшие плагины картинок в WordPress — галереи, слайдеры, для миниатюр и т.п. (6,07 из 7, голосов - 30)
- Лучшие плагины статистики в WordPress — просмотр посещаемости сайта и не только (4,65 из 7, голосов - 37)
- Обновление плагинов и тем в WordPress: автоматическое, через FTP, скрытие уведомлений (5,19 из 7, голосов - 31)
- Дизайн Мания - о веб-дизайне и не только.
- Tod's Blog - все про заработок онлайн.
- Вебдванольные заметки - обзоры веб-сервисов.
- Советы по выбору холодильника LG с технологией No Frost
- Зачем нужны Wi-Fi ретрансляторы и как выбрать подходящую модель
- Введение в онлайн-казино Slotor777: многообразие игр и привлекательные бонусы
- Необходимость использования облачного хранилища в наше время, что важно и как выгодно?
- Спрощення процесу звітності за допомогою програми BAS Бухгалтерія
- Технологія підключення інтернету GPON та її переваги
- За що гравці найбільше цінують Lineage 2
- Для каких проектов нужна аренда виртуального сервера и что такое VPS
Хм, плагин довольно таки интересный!
А для чего нужен такой вывод сообщений с разным количеством статей?
Полезная штука.
cava150, у меня, например, на некоторых блогах на главной только 1 пост целиком, а в архивах и поиске по 10 анонсов.
>Чего я лично только не пробовал, начинался много документации с официального сайта, но до финального результата, увы, так и не дошел.
Как говорил Козьма Прутков, Зри в корень, то есть в исходник :)
Вместо $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;
Virtual, что-то код применить не получилось, матюкается на строку $offset = ($_GET[‘paged’] – 1) ….
Вообще относительно глюка плагина Different Posts Per Page и количества страниц на главной я таки понял в чем проблема. Страницы у меня выводятся через плагин PageNavi, а для него применяется разбиение на количество страниц как на главной (home), ему то никто не сообщает, что на подстраницах (Paded) совсем другое разбиение.
Пришлось использовать «код для вывода страниц без плагина», для которого я задал
$pages = ceil($wp_query->found_posts/8);
>Virtual, что-то код применить не получилось
Когда я его писал, он точно был работоспособным.
Огромное спасибо за код! С плагином не захотел возиться, а вот код для главной страницы поменял. Сработало — на главной странице только желаемая одна запись, а на поиске и архиве — столько, сколько я установил в параметре «Чтение».
а у меня плагин со значением для главной страницы = 3 и WP_Query(‘showposts=3’) выводит по три записи на всех страницах, а не только на главной… сижу голову ломаю.
тема mystique. в ней, на сколько я понял, немного не стандартный вывод пагинации. подскажите, пожалуйста, куда копать, с wp впервые столкнулся
Алексей, если я правильно понял, то WP_Query(‘showposts=3′) из шаблона нужно убрать — оно и задает вывод по 3 поста, пусть разбиение на страницы полностью контролирует плагин cbnet Different Posts Per Page.
дико извиняюсь.
вы как раз и описали эту же проблему в конце своего поста.
>выводит по три записи на всех страницах, а не только на главной
здесь я имел ввиду, что, как вы написали:
«касалось не только главной страницы, а и все остальных страниц, куда бы вы переходили по ссылкам в навигации на главной (они тоже считаются как home)»
Оказывается у меня тоже пагинация выводится через PageNavi.
В итоге по вашему совету в нем изменил
$max_page = $wp_query->max_num_pages;
на
$max_page = ceil($wp_query->found_posts/6);
(6 — число записей на странице)
Других вариантов не нашел.
Выводится вроде верно.
Но ведь получился «быдлокод»! При обновлении все слетит, или другой человек потом будет разбираться — не разберется! Как улучшить-то все это дело? :-)
и да, с плагином выводит все отлично! но вот пагинация удручает
to Virtual 17.08.2010
Спасибо! Помогло.
Бился с постраничным выводом используя плагин wp_pagenavi. Как только не крутил аргументы. Добавлял $query_string. Только с Вашим &offset=$offset&paged=$paged — хоть как-то заработало.
Один косяк остался — если в параметрах блога стоит число больше, чем posts_per_page, то последние N страниц не находятся (N = параметр_блога / posts_per_page).
Плагин еще пока не ставил, все надеялся решить вопрос с правкой index.php
Ситуация ппроще, нужно разбиение на главной и страницах по 5, а в рубриках, как задано в админе.
Код WP_Query(‘showposts=5’) в index.php выводит по 5 постов на всех страницах, только посты все одинаковые, те что на главной. Навигация идет через Page Navi. Не подскажете, почему так может быть? По идее должны же отображаться другие посты на следующих страницах, у вас так было, и у комментаторов тоже.
Может кому еще будет полезно.
Поставил плагин Custom Posts Per Page (он более новый, нежели упомянутый в статье) и настроил там показ количества постов на главной странице и остальных страницах, а так же в рубриках. Как раз то, что надо. Pagi Navi работает нормально, ничего в нем править теперь не надо.
В плагине есть и возможность выставить разное количество постов на главной и остальных страницах. Вот в этом случае, Page Navi делает не правильную навигацию и криво работает. Сейчас попробую еще другие плагины для постраничной навигации.
Появились ли какие-нибудь способы вывода разное количество записей на страницах блога без плагинов?
Руслан, недавно публиковал статью Разное количество записей на странице без плагинов — там найдете один из вариантов (достаточно простых)
Искал тут что-нибудь по плагину WP-PageNavi. Может, подскажете. В какой-то момент пришлось переустановить сайт и базу. В принципе. все свершилось безболезненно, но, после этого плагин WP-PageNavi вроде показывает кучу страниц записей, вроде переходит на нужную страницу, но там в любом случае оказывается содержимое первой страницы. Если выключить плагин, стандартные «предыдущая» и «следующая страницы» отсутствуют, как класс. :)
Спасибо заранее.
Бакумур, если честно, сложно что-то посоветовать, т.к. никогда проблем с WP-PageNavi не было. Можно попробовать переустановить модуль, удалив его с сайта полностью (не только файлы, но и из БД). Возможно, модуль конфликтует с другим каким-то.
Tod, кое что выяснил: проблема появляется почему-то при использовании вот этого кода:
Без него все работает ОК
Фокус в том, что хотел на главной, чтобы не выводились посты определенных категорий. Ан нет, нопасаран)))
Все равно спасибо, надо было спросить у кого-то, чтобы разобраться.
bakumur, код, к сожалению, не сохранился в комментарии. Вообще если править порядок отображения постов, то там есть несколько разных нюансов, в которые нужно вникать. По поводу исключения постов по категории с главной советую плагин Exclude categories.
Custom Posts Per Page — этот плагин решает проблему, чтобы на первой странице можно было выводить допустим одно количество постов, а на 2,3 и.т.д. другое количество.
Артур, спасибо за подсказку! давно просто не изучал, что там нового по этому вопросу.
Здравствуйте, суть проблемы вот в чём. На страницу выводятся превьюшки двух постов, но при нажатие на ссылку «Читать далее…» или заголовок статьи, основной контент не выводиться и внешне на странице ничего не меняется хотя URL изменяется и всё вроде как бы должно работать))
Николай, к сожалению, код не вставился в комментарий. Но по описанию похоже, что для «единичной записи» не определен шаблон single.php. Полный текст статьи выводит функция the_content, возможно в установленной теме указан вместо нее the_excerpt. Нужно создать отдельно single.php или править базовый index.php.
Всю статью я не читал, но проблему кажется понял. Попробуй создать отдельный файл, например page-hompage и укажи слаг главной страницы как hompage. Ну и соответствующий контент создай и не забудь указать (например, content-hompage). И можешь исправлять сколько душе угодно
Полезная статья, спасибо
Когда применяю код с ограничением постов на странице, он срабатывает отлично, но первые посты к примеру три, выводятся с другой категории почему то, а не с текущей, когда перехожу по пагинации то загружаются уже мои посты. В чем может быть проблема?
Max, возможно нужно задать в коде использование конкретного ID категории (то есть считывать на странице текущий ID, а потом его вставлять в query). Вообще, помнится, там с этой пагинацией все немного запутанно.