В WordPress по умолчанию на странице рубрики выводится определённое количество постов, заданное в настройках чтения. Но иногда требуется ограничить число постов в конкретной рубрике или в нескольких, оставляя остальные рубрики без изменений. В этой статье разберём, как сделать это с помощью кода и использовать плагины для гибкого управления выводом контента.
Почему стоит ограничивать число постов в рубрике
Ограничение количества постов в рубрике помогает улучшить навигацию по сайту, ускорить загрузку страниц и сделать контент более структурированным. Если на странице рубрики выводить слишком много записей, это может привести к увеличению времени загрузки и ухудшению пользовательского опыта.
Кроме того, для коммерческих или новостных сайтов важно демонстрировать только актуальные материалы, а старые показывать на отдельных страницах или архивных списках.
Ограничение числа постов в рубрике через functions.php
Для решения задачи можно использовать хук pre_get_posts, который позволяет модифицировать основной запрос WordPress до его выполнения. Ниже пример функции, которая ограничивает количество постов для рубрики с ID 7 до 5 штук:
function wptest_limit_posts_in_category( $query ) {
if ( !is_admin() && $query->is_main_query() && $query->is_category( 7 ) ) {
$query->set( 'posts_per_page', 5 );
}
}
add_action( 'pre_get_posts', 'wptest_limit_posts_in_category' );
Объяснение кода:
!is_admin()— исключаем административную панель;$query->is_main_query()— убеждаемся, что меняем именно основной запрос;$query->is_category( 7 )— условие для конкретной рубрики по ID;$query->set( 'posts_per_page', 5 );— задаём ограничение в 5 постов.
Можно использовать название рубрики вместо ID, например $query->is_category( 'novosti' ).
Ограничение постов для нескольких рубрик
Чтобы ограничить количество постов сразу в нескольких рубриках, достаточно изменить условие на массив ID или слагов:
function wptest_limit_posts_multiple_categories( $query ) {
if ( !is_admin() && $query->is_main_query() && $query->is_category( array( 'novosti', 12, 34 ) ) ) {
$query->set( 'posts_per_page', 3 );
}
}
add_action( 'pre_get_posts', 'wptest_limit_posts_multiple_categories' );
В этом примере для рубрик с слагом «novosti» и ID 12 и 34 будет выводиться по 3 поста.
Использование плагина для ограничения числа постов в рубриках
Если не хочется писать код, можно воспользоваться плагинами, которые дают расширенные возможности по управлению отображением записей на страницах архивов.
Рекомендуем обратить внимание на плагин Clearfy Pro. Он содержит модуль оптимизации, который позволяет задать индивидуальные ограничения на количество постов в различных типах архивов, включая рубрики. Плагин поддерживает простую настройку через админ-панель без правки кода.
Настройка ограничения через Clearfy Pro
После установки и активации плагина:
- Перейдите в раздел оптимизации;
- Найдите опцию «Ограничение числа постов в архивах»;
- Выберите нужные рубрики и установите для них количество выводимых постов;
- Сохраните изменения и проверьте результат.
Кастомизация пагинации при ограничении постов
Если вы ограничиваете количество постов на странице рубрики, важно правильно настроить пагинацию, чтобы пользователи могли переходить к следующим страницам списка.
В шаблоне архива рубрики обычно используется функция the_posts_pagination() для вывода навигации. Она автоматически учитывает параметр posts_per_page, заданный в запросе.
Пример стандартного вызова пагинации:
if ( have_posts() ) :
while ( have_posts() ) : the_post();
// Вывод контента поста
endwhile;
the_posts_pagination( array(
'mid_size' => 2,
'prev_text' => __('« Назад'),
'next_text' => __('Вперед »'),
) );
else :
echo '<p>Посты не найдены.</p>';
endif;
Если вы используете собственные запросы, убедитесь, что параметр paged передаётся корректно, чтобы пагинация работала.
Советы по оптимизации
- Не задавайте слишком маленькое количество постов, чтобы не ухудшить юзабилити;
- Используйте кэширование страниц для ускорения загрузки;
- При необходимости используйте AJAX для подгрузки дополнительных постов без перезагрузки;
- Следите за тем, чтобы изменения не ломали структуру URL и SEO.
Пример AJAX подгрузки постов в рубрике
Для улучшения UX можно сделать подгрузку постов по кнопке «Показать ещё» с помощью AJAX. Ниже упрощённый пример:
function wptest_load_more_scripts() {
if ( is_category() ) {
wp_enqueue_script( 'wptest-loadmore', get_template_directory_uri() . '/js/loadmore.js', array('jquery'), null, true );
wp_localize_script( 'wptest-loadmore', 'wptest_loadmore_params', array(
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce( 'wptest_loadmore_nonce' ),
'query_vars' => json_encode( $GLOBALS['wp_query']->query ),
'current_page' => get_query_var('paged') ? get_query_var('paged') : 1
));
}
}
add_action( 'wp_enqueue_scripts', 'wptest_load_more_scripts' );
function wptest_load_more_ajax_handler() {
check_ajax_referer( 'wptest_loadmore_nonce', 'nonce' );
$args = json_decode( stripslashes( $_POST['query_vars'] ), true );
$args['paged'] = $_POST['page'] + 1;
$args['post_status'] = 'publish';
query_posts( $args );
if ( have_posts() ) :
while ( have_posts() ) : the_post();
get_template_part( 'template-parts/content', get_post_format() );
endwhile;
endif;
wp_die();
}
add_action( 'wp_ajax_nopriv_wptest_load_more', 'wptest_load_more_ajax_handler' );
add_action( 'wp_ajax_wptest_load_more', 'wptest_load_more_ajax_handler' );
Этот код подключает скрипт и создаёт AJAX-обработчик, который подгружает следующую страницу постов рубрики. В фронтенд-скрипте (loadmore.js) нужно реализовать отправку AJAX-запроса и вставку новых постов.
Выводы
Ограничение количества постов в рубрике — частая задача, которую можно решить как с помощью простого кода в functions.php, так и с помощью плагинов, например, Clearfy Pro. Для улучшения UX стоит дополнительно настроить корректную пагинацию или реализовать AJAX-подгрузку.
Используйте указанные способы и советы, чтобы грамотно оптимизировать вывод рубрик на вашем сайте и сделать его удобнее для посетителей.