Разное количество записей на странице без плагинов
Бывают моменты, когда нужен нестандартный подход к ведению сайта. Разное количество записей на разных страницах как раз такой вариант. Здесь не получится обойтись выбором количества записей через Параметры — Чтение, так как изменятся все страницы сайта.
Можно пробовать решить проблему через плагины, искать которые лучше в официальном репозитории WordPress. К сожалению, чем дальше, тем больше таких инструментов переходят на платную основу и дают слишком урезанный набор действий. Ну и дополнительный плагин — дополнительная нагрузка на сайт, пусть и не большая.
Выглядеть настройки будут примерно так:
Можно попробовать решить проблему через какие-нибудь хуки. Например мы хотим вывести только 5 последних постов:
<?php query_posts('showposts=5'); ?>
<ul>
<?php while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
<?php endwhile;?>
</ul>
Или же хотим выводить все те же 5 постов, но из какой-то конкретной категории:
<?php query_posts('cat=2&showposts=5'); ?>
<ul>
<?php while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
<?php endwhile;?>
</ul>
Однако! Для решения нашей задачи лучше всего подойдет хук pre_get_posts. Что нужно сделать для того, чтобы грамотно сформировать вывод нужного количества записей на нужных страницах. Первым делом заходим в наш functions.php. Туда вставьте следующую конструкцию:
function custom_posts_per_page($query){ if(is_home()){ $query->set('posts_per_page',9); } if(is_search()){ $query->set('posts_per_page',10); } if(is_archive()){ $query->set('posts_per_page',30); } } add_action('pre_get_posts','custom_posts_per_page');
Здесь «is_home()» означает Главную страницу сайта, а цифра «9» — количество записей на ней. is_search() — это результытй поиска, а is_archive() — архив записей.
Если вам нужно вывести все записи, тогда в поле значения добавляйте «-1».
В плагине есть и возможность выставить разное количество постов на главной и остальных страницах. Вот в этом случае, Page Navi делает не правильную навигацию и криво работает. Сейчас попробую еще другие плагины для постраничной навигации. Руслан, недавно публиковал статью Разное количество записей на странице без плагинов там найдете один из вариантов (достаточно простых)
Идеальный вариант в подобных ситуациях — не плагин, а небольшой участок кода. Все же, многие плагины подгружают свои файлы, чем увеличивают нагрузку. Всегда лучше, когда точно знаешь ЧТО и КУДА добавил.
Проблема в том, что если пишешь
if(is_front_page()){$query->set(‘posts_per_page’,5);}
if(is_paged()){$query->set(‘posts_per_page’,40);}
На второй странице начинают показываться записи начиная с 41, а не с 6, как мне бы хотелось.
Какие могут быть решения данного вопроса?
Если Вы имеете ввиду Главную страницу сайта, то на ней однозначно будут показываться записи с 6-й. Перепроверьте: добавляете именно такую конструкцию для Главной страницы?
function custom_posts_per_page($query){
if(is_home()){ $query->set(‘posts_per_page’,5); }
}
add_action(‘pre_get_posts’,’custom_posts_per_page’);
Сегодня лично пробовал вставлять в файл функций шаблона. Все работает как должно (добавляется переход к старым записям и они идут с 6-й и далее).
Стоит учитывать формат шаблона. Если он отличен от условной нормы, то данный код может и не сработать. Попробуйте присланный выше участок кода. Если нет, нужно уже смотреть на шаблон и разбираться в причинах.
Я хотела, чтобы у меня на первой странице было 5 записей, а на всех остальных 40. Ваша запись обеспечивает 5 на первой, но и на второй и на всех остальных тоже будет 5. Если писать
if(is_front_page()){$query->set(‘posts_per_page’,5);}
if(is_paged()){$query->set(‘posts_per_page’,40);}
На второй странице начинают показываться записи с 41, а не с 6, как мне бы хотелось.
Шаблон я сама написала
Ааа… То есть, Вы хотите не просто добавить разделение на страницы, а сделать его сложным.
Метод, который показан в статье позволяет делать нужное количество записей на разных страницах. Под разными страницами понимаются страницы типа «Главная», «Новости», «Категория 1» и т.д., а не «1,2,3» на Главной.
Если хотите, напишите более подробно на main@mail-altcreative.ru (что делали, куда добавляли, что получили, чего не получили. Со ссылкой на ресурс)