В стандартном WordPress количество записей, выводимых на страницах архивов, определяется настройками в админке — в разделе «Настройки» → «Чтение» → «Количество записей на странице». Однако иногда требуется установить индивидуальное, отличное от общего, ограничение для конкретных архивов, например для категорий, тегов или собственных типов записей. В этой статье подробно разберём, как это сделать, используя хуки WordPress и небольшой код.
Почему нужно ограничивать число публикаций на страницах архива
Изменение количества записей на странице архива позволяет:
- Оптимизировать скорость загрузки страниц;
- Улучшить восприятие контента пользователями;
- Настроить вывод в соответствии с дизайном сайта;
- Создать уникальный пользовательский опыт для разных типов архива.
При этом изменение общего параметра в настройках затрагивает все архивы без исключения. Чтобы сделать ограничение выборочным, необходимо программное решение.
Используем хуки WordPress для изменения количества публикаций на архиве
Самый простой и правильный способ — использовать фильтр pre_get_posts. Он позволяет модифицировать основной запрос до того, как WordPress получит данные из базы.
Пример кода для ограничения записей на архиве категории
function wppremium_pre_get_posts_limit_archive( $query ) {
// Проверяем, что это главный запрос и фронтенд
if ( ! is_admin() && $query->is_main_query() ) {
// Ограничиваем количество записей для архива категории с ID 5
if ( is_category( 5 ) ) {
$query->set( 'posts_per_page', 3 );
}
}
}
add_action( 'pre_get_posts', 'wppremium_pre_get_posts_limit_archive' );
В этом примере для категории с ID 5 будет показываться только 3 записи на странице. Для других категорий и архивов параметр останется стандартным.
Как задать ограничение для нескольких таксономий и типов записей
Если требуется ограничить количество публикаций для нескольких архивов, например, категорий, тегов и кастомных типов записей, можно расширить условие:
function wppremium_pre_get_posts_limit_multi( $query ) {
if ( ! is_admin() && $query->is_main_query() ) {
if ( is_category( array( 'novosti', 'blog' ) ) ) {
$query->set( 'posts_per_page', 5 );
} elseif ( is_tag( 'aktsii' ) ) {
$query->set( 'posts_per_page', 2 );
} elseif ( is_post_type_archive( 'product' ) ) {
$query->set( 'posts_per_page', 10 );
}
}
}
add_action( 'pre_get_posts', 'wppremium_pre_get_posts_limit_multi' );
Здесь для категорий «novosti» и «blog» выводится по 5 записей, для тега «aktsii» — 2, а для архива типа записи «product» — 10.
Примеры плагинов для управления количеством записей на архивах
Если вы не хотите писать код вручную, можно использовать специализированные плагины. Вот несколько полезных вариантов:
- WP Premium Pagination — расширенный плагин для управления пагинацией и количеством записей, поддерживает настройку для каждого типа архива. Подробнее: https://wpshop.ru/plugins/wppagination/
- Clearfy Pro — плагин для оптимизации и настройки WordPress, включая управление выводом записей. Подходит для комплексной настройки. Подробнее: https://wpshop.ru/plugins/clearfy-pro/
Важные нюансы и рекомендации
При работе с pre_get_posts всегда проверяйте, что изменения применяются только к главному запросу ($query->is_main_query()) и только на фронтенде (! is_admin()), чтобы избежать побочных эффектов в административной части и других запросах.
Также учтите, что если на сайте используется объектный кэш или сторонние плагины кеширования, изменения параметров запроса могут не сразу отобразиться. В таких случаях нужно очистить кэш.
Если на сайте много пользовательских типов записей или таксономий, рекомендуется централизовать логику ограничения в отдельной функции, чтобы проще поддерживать код.
Итог: гибкий контроль количества записей на архивах WordPress
Используя фильтр pre_get_posts, можно легко и точно задать разное количество публикаций для любых страниц архива — категорий, тегов, типов записей. Это позволяет улучшить навигацию, снизить нагрузку на сервер и сделать сайт удобнее для посетителей.
Подключайте готовые плагины для более сложных задач или автоматизации. Например, WP Premium Pagination отлично подойдет для управления пагинацией и ограничениями без кода.
Применяйте представленные техники и делайте сайты на WordPress более профессиональными и быстрыми!