Как установить ограничение на количество постов в выводах WordPress

В WordPress часто возникает необходимость ограничить количество выводимых постов на страницах блога, в архивах, на главной или в кастомных запросах. Это помогает улучшить производительность сайта, сделать интерфейс удобнее и адаптировать вывод под конкретные задачи. В этой статье подробно разберём, как правильно ограничить количество постов с помощью настроек WP, хуков и плагинов, а также рассмотрим примеры кода для разных случаев.

Почему важно ограничивать количество постов в WordPress

Большое количество постов на одной странице может негативно повлиять на скорость загрузки и восприятие контента пользователем. Особенно это заметно, когда тема или плагин выводят все записи без пагинации. Ограничение числа постов позволяет:

  • Улучшить производительность страницы;
  • Сделать навигацию по сайту удобнее;
  • Оптимизировать запросы к базе данных;
  • Повысить юзабилити и снизить показатель отказов.

Важно понимать, что WordPress по умолчанию выводит число постов, заданное в настройках «Число записей на странице» в разделе «Чтение». Но часто нужна более гибкая настройка для отдельных страниц и запросов.

Как задать ограничение количества постов на главной и страницах архива

Самый простой способ — изменить параметр posts_per_page в основном запросе WordPress. Для этого используйте хук pre_get_posts. Он позволяет модифицировать параметры WP_Query перед выполнением запроса.

Пример функции для ограничения постов на главной странице и страницах архива до 5:

function wpdemo_limit_posts_per_page( $query ) {
    if ( ! is_admin() && $query->is_main_query() ) {
        if ( $query->is_home() || $query->is_archive() ) {
            $query->set( 'posts_per_page', 5 );
        }
    }
}
add_action( 'pre_get_posts', 'wpdemo_limit_posts_per_page' );

Здесь мы проверяем, что запрос основной и не из админки, затем для главной и архивных страниц задаём ограничение в 5 постов. Этот метод прост и эффективен, подходит для большинства тем и проектов.

Ограничение постов в кастомных WP_Query

Часто вывод постов происходит через собственные запросы. В таких случаях ограничение задаётся параметром при создании объекта:

$args = array(
    'post_type' => 'post',
    'posts_per_page' => 3,
    'orderby' => 'date',
    'order' => 'DESC',
);

$custom_query = new WP_Query( $args );

if ( $custom_query->have_posts() ) {
    while ( $custom_query->have_posts() ) {
        $custom_query->the_post();
        // вывод контента
    }
    wp_reset_postdata();
}

Здесь posts_per_page ограничивает количество записей до 3. Такой подход нужен при создании кастомных блоков, виджетов и шаблонов.

Ограничение в REST API запросах WordPress

Если вы используете WP REST API для вывода постов на фронтенде, то ограничение задаётся параметром per_page. Например, чтобы получить 4 записи, запрос выглядит так:

https://example.com/wp-json/wp/v2/posts?per_page=4

Если вы создаёте свои кастомные эндпоинты, обязательно обрабатывайте параметр per_page или задавайте дефолтное ограничение в обработчике.

Плагины для управления количеством постов

Если не хотите писать код, можно использовать плагины, которые расширяют возможности по управлению выводом:

  • WP Limit Posts — простой плагин для ограничения постов в виджетах и шорткодах.
  • Clearfy Pro — комплексный инструмент оптимизации, в том числе позволяет управлять настройками вывода контента.

Использование плагинов удобно, если нужно быстро настроить ограничения без программирования.

Как сделать ограничение с сохранением пагинации

При выводе постов с ограничением важно сохранить пагинацию, чтобы посетители могли перейти к следующим страницам с постами. Для этого нужно правильно настроить WP_Query и разметку.

Пример функции для главной страницы с пагинацией:

function wpdemo_limit_posts_with_pagination( $query ) {
    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {
        $query->set( 'posts_per_page', 5 );
    }
}
add_action( 'pre_get_posts', 'wpdemo_limit_posts_with_pagination' );

И в шаблоне используйте стандартные функции пагинации:

the_posts_pagination( array(
    'mid_size'  => 2,
    'prev_text' => __( 'Назад', 'wpdemo' ),
    'next_text' => __( 'Вперед', 'wpdemo' ),
) );
<

Так посетитель увидит 5 постов на странице и сможет перейти к следующим при помощи пагинации.

Вывод ограниченного количества постов в виджетах и сайдбарах

Если вы используете стандартный виджет «Последние записи», то количество задаётся в настройках виджета. Для кастомных виджетов или плагинов используйте параметр posts_per_page.

Пример вывода 3 последних постов в виджете с помощью WP_Query:

class Wpdemo_Recent_Posts_Widget extends WP_Widget {
    public function __construct() {
        parent::__construct('wpdemo_recent_posts', 'WPdemo Последние записи');
    }
    public function widget( $args, $instance ) {
        $query = new WP_Query( array( 'posts_per_page' => 3 ) );
        echo $args['before_widget'];
        echo $args['before_title'] . 'Последние записи' . $args['after_title'];
        if ( $query->have_posts() ) {
            echo '<ul>';
            while ( $query->have_posts() ) {
                $query->the_post();
                echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
            }
            echo '</ul>';
            wp_reset_postdata();
        }
        echo $args['after_widget'];
    }
}
add_action( 'widgets_init', function(){
    register_widget( 'Wpdemo_Recent_Posts_Widget' );
} );

Так вы легко адаптируете вывод постов в сайдбаре с нужным ограничением.

Советы по оптимизации запросов с ограничением постов

При работе с ограничением количества постов стоит учитывать оптимизацию запросов:

  • Используйте кеширование результатов WP_Query (например, transient API или плагин Clearfy Pro);
  • Минимизируйте выборку полей, если нужна только часть данных (fields => 'ids' или 'no_found_rows' => true для запросов без пагинации);
  • Избегайте лишних JOIN и фильтров, если не нужны дополнительные метаданные;
  • Проверяйте нагрузку на базу при больших сайтах и используйте индексирование.

Это позволит сохранить скорость и стабильность сайта даже при большом количестве записей.

Итог

Ограничение количества постов в WordPress — простая, но важная задача для любого сайта. Используйте хук pre_get_posts для изменения основного запроса, задавайте параметр posts_per_page в кастомных WP_Query и REST API, применяйте плагины для удобства. Не забывайте про пагинацию и оптимизацию запросов, чтобы сохранить хорошую производительность и удобство пользователей.

Как добавить свои свойства в метаданные постов WordPress
11.11.2025
WooCommerce: автоматическое сброс статуса заказа при ошибках платежа
09.05.2026
WooCommerce: автоматическое изменение цены товара при расширенном дисконте
06.05.2026
Как добавить автоматическое сохранение в формы WordPress для защиты данных
20.01.2026
Как создать динамический шорткод в WordPress с примерами кода
20.11.2025