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

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

Можно пробовать решить проблему через плагины, искать которые лучше в официальном репозитории 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».

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *