Как использовать параметр paged в WP_Query для правильной пагинации

Диагностика проблемы с пагинацией в WP_Query

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

Для диагностики используйте следующий чек-лист:

  • Правильно ли установлен параметр paged из глобального объекта $paged или get_query_var('paged')?
  • Не перезаписывается ли paged внутри цикла или в параметрах WP_Query?
  • Не конфликтует ли пагинация с URL-структурой и настройками постоянных ссылок (Permalinks)?
  • Вызывается ли wp_reset_postdata() после цикла для сброса основного запроса?

Пошаговое решение: правильное использование paged в WP_Query

1. Получение текущей страницы пагинации

В шаблоне или функции, где создаётся WP_Query, обязательно получите текущую страницу пагинации из глобальных переменных WordPress:

if ( get_query_var('paged') ) {
    $paged = get_query_var('paged');
} elseif ( get_query_var('page') ) { // на случай пагинации на статических страницах
    $paged = get_query_var('page');
} else {
    $paged = 1;
}

2. Передача параметра paged в WP_Query

В массив аргументов WP_Query добавьте параметр paged:

$args = array(
    'post_type' => 'post',
    'posts_per_page' => 10,
    'paged' => $paged
);
$query = new WP_Query($args);

3. Вывод пагинации и сброс данных

После цикла выведите пагинацию и вызовите wp_reset_postdata():

if ( $query->have_posts() ) :
    while ( $query->have_posts() ) : $query->the_post();
        // вывод записи
    endwhile;

    // пагинация
    echo paginate_links(array(
        'total' => $query->max_num_pages,
        'current' => $paged,
        'format' => '?paged=%#%',
        'prev_text' => '«',
        'next_text' => '»'
    ));

    wp_reset_postdata();
endif;

Проверка результата после внедрения решения

Чтобы убедиться, что пагинация работает корректно:

  • Перейдите на страницу с кастомным запросом и нажмите на кнопки пагинации.
  • URL должен меняться с параметром ?paged=2, ?paged=3 и т.д.
  • Контент на странице должен обновляться, отображая записи соответствующей страницы.
  • Отсутствуют ошибки 404 при переходе по страницам.

Частые ошибки и как их исправить

1. Параметр paged не передаётся или берётся неверно

Ошибка: $paged всегда равен 1, пагинация не работает.

Исправление: использовать get_query_var('paged') и дополнительно get_query_var('page'), поскольку WordPress может использовать разные переменные в зависимости от типа страницы.

2. Конфликт с настройками постоянных ссылок

Ошибка: переход по страницам пагинации приводит к 404 ошибке.

Исправление: Перейдите в Настройки > Постоянные ссылки и нажмите «Сохранить изменения» без изменений, чтобы сбросить правила перезаписи URL.

3. Не вызван wp_reset_postdata() после цикла

Ошибка: пагинация и основной запрос работают некорректно.

Исправление: всегда вызывайте wp_reset_postdata() после кастомного цикла на WP_Query.

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

  • Кеширование: Используйте объектное кеширование результатов запросов, если данные не меняются часто. Можно интегрировать кеш через Transients API.
  • Ограничение постов на странице: Устанавливайте разумный posts_per_page, чтобы избежать тяжелых запросов и долгой загрузки.
  • Фильтрация входных данных: Если параметр paged берётся из URL, проверяйте и приводите его к целочисленному типу для предотвращения SQL-инъекций.

Сравнение способов реализации пагинации с WP_Query

МетодПлюсыМинусыПример
Использование paged с WP_Query Простой, нативный, гибкий Требует правильной передачи параметра Код из статьи
Пагинация через get_posts + manual offset Простая реализация для мелких выборок Неэффективно для больших наборов данных get_posts(['offset' => ($paged-1)*10, 'numberposts' => 10])
Пагинация с WP-PageNavi Удобный UI, дополнительные опции Зависимость от плагина wp_pagenavi(['query' => $query])

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как использовать хуки пагинации в WordPress: практические примеры и советы
12.11.2025
Как использовать WP-PageNavi для пагинации кастомных записей с фильтрами
10.02.2026
Как создать собственную пагинацию в WordPress без плагинов
01.11.2025
Как установить и настроить WP-PageNavi для пагинации в WordPress
22.02.2026
Как быстро исправить ошибку 404 при переходе по страницам пагинации в WordPress
06.05.2026
×
WordPress
дай сайту суперсилу!

Скидки на топовые темы и плагины

Активировать суперсилу ⋙