Часто возникает необходимость контролировать количество записей, отображаемых на страницах архива WordPress — категорий, меток, авторов и других архивов. По умолчанию WordPress использует настройку «Количество записей на странице» в разделе Настройки → Чтение, но это глобальная настройка и не всегда подходит для конкретных архивов.
Почему важно ограничивать количество постов на странице архива?
Контроль количества постов на странице архива влияет на скорость загрузки, удобство навигации и восприятие информации пользователем. Если на странице отображать слишком много записей, это замедлит загрузку, увеличит нагрузку на сервер и усложнит восприятие контента.
В некоторых случаях, например, при создании новостных или тематических разделов, нужно задать уникальное количество постов на конкретных архивах, не меняя глобальные настройки.
Как изменить количество постов на странице архива через functions.php
Для тонкой настройки количества постов на различных страницах архива можно использовать фильтр pre_get_posts. Ниже пример функции, которая устанавливает лимит в 5 постов на страницах категории с ID 10, а для всех остальных архивов оставляет стандартное значение.
function wpstart_set_posts_per_page_archive($query) {
if (!is_admin() && $query->is_main_query()) {
if ($query->is_category(10)) {
$query->set('posts_per_page', 5);
}
}
}
add_action('pre_get_posts', 'wpstart_set_posts_per_page_archive');Объяснение:
!is_admin()— чтобы не влиять на запросы в админке.$query->is_main_query()— чтобы изменить только основной запрос WordPress.$query->is_category(10)— проверка, что мы на архиве категории с ID 10.$query->set('posts_per_page', 5)— изменение количества постов на странице.
Как задать разные лимиты для нескольких архивов
Если нужно задать разные лимиты для нескольких категорий, тегов или авторов, расширим функцию:
function wpstart_custom_posts_per_page($query) {
if (!is_admin() && $query->is_main_query()) {
if ($query->is_category('novosti')) {
$query->set('posts_per_page', 8);
} elseif ($query->is_tag('special')) {
$query->set('posts_per_page', 3);
} elseif ($query->is_author('admin')) {
$query->set('posts_per_page', 10);
}
}
}
add_action('pre_get_posts', 'wpstart_custom_posts_per_page');Здесь мы проверяем, на каком архиве находимся, и задаем индивидуальный лимит для каждой.
Использование плагинов для управления количеством постов на страницах
Если вы предпочитаете не писать код, можно использовать плагины. Вот несколько проверенных решений:
- WP Custom Posts Per Page — позволяет задавать количество постов для разных типов архивов через интерфейс.
- Category Posts Per Page — фокусируется на категориях, задавая для каждой индивидуальный лимит.
- Clearfy Pro — комплексный плагин оптимизации, в том числе с возможностями тонкой настройки вывода записей.
Эти плагины помогут гибко настраивать количество постов без кода и конфликтов.
Как проверить и отладить изменение количества постов
После внесения кода важно проверить, что изменения применились корректно. Это можно сделать так:
- Откройте нужный архив в браузере, посмотрите количество постов.
- Для отладки используйте
var_dump($query)внутри функции, чтобы убедиться в параметрах запроса. - Проверьте, чтобы не было конфликтов с другими плагинами, которые могут менять
posts_per_page.
Если изменения не видны, возможно, другой плагин или тема перекрывают настройки. В этом случае попробуйте отключить другие плагины или сменить тему для теста.
Дополнительные советы по оптимизации вывода постов на страницах архива
Кроме ограничения количества постов, рекомендуется:
- Использовать пагинацию для удобной навигации.
- Подгружать посты по AJAX, чтобы не перегружать страницу.
- Оптимизировать запросы — избегать ненужных JOIN и использовать
WP_Queryс правильными параметрами. - Кэшировать результаты запросов с помощью плагинов кэширования или собственного решения.
Например, для AJAX-подгрузки можно использовать следующий упрощенный пример:
add_action('wp_ajax_wpstart_load_more', 'wpstart_load_more_callback');
add_action('wp_ajax_nopriv_wpstart_load_more', 'wpstart_load_more_callback');
function wpstart_load_more_callback() {
$paged = isset($_POST['page']) ? intval($_POST['page']) : 1;
$args = array(
'post_type' => 'post',
'posts_per_page' => 5,
'paged' => $paged,
);
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
echo '<h2>' . get_the_title() . '</h2>';
echo '<div>' . get_the_excerpt() . '</div>';
}
}
wp_die();
}Это позволяет загружать новые посты по кнопке без перезагрузки страницы, улучшая UX.
Вывод
Установка лимита на количество постов для страниц архива в WordPress — важный элемент управления контентом и производительностью сайта. Использование фильтра pre_get_posts позволяет гибко настраивать вывод без изменения глобальных настроек. Для тех, кто предпочитает готовые решения, существуют плагины с удобным интерфейсом.
Для более сложных задач, например, AJAX-подгрузки, можно написать собственный код, который значительно улучшит взаимодействие пользователя с сайтом.
Если хотите попробовать готовые инструменты оптимизации и управления контентом, обратите внимание на Clearfy Pro — один из лучших плагинов для расширенной настройки WordPress.