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

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

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

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

  1. Александр 23.07.2019 в 13:30

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

    1. Идеальный вариант в подобных ситуациях — не плагин, а небольшой участок кода. Все же, многие плагины подгружают свои файлы, чем увеличивают нагрузку. Всегда лучше, когда точно знаешь ЧТО и КУДА добавил.

  2. Проблема в том, что если пишешь

    if(is_front_page()){$query->set(‘posts_per_page’,5);}
    if(is_paged()){$query->set(‘posts_per_page’,40);}
    На второй странице начинают показываться записи начиная с 41, а не с 6, как мне бы хотелось.

    Какие могут быть решения данного вопроса?

    1. Если Вы имеете ввиду Главную страницу сайта, то на ней однозначно будут показываться записи с 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-й и далее).

      Стоит учитывать формат шаблона. Если он отличен от условной нормы, то данный код может и не сработать. Попробуйте присланный выше участок кода. Если нет, нужно уже смотреть на шаблон и разбираться в причинах.

      1. Я хотела, чтобы у меня на первой странице было 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» и т.д., а не «1,2,3» на Главной.

          Если хотите, напишите более подробно на main@mail-altcreative.ru (что делали, куда добавляли, что получили, чего не получили. Со ссылкой на ресурс)

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

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