Как исправить несоответствие пагинации при использовании WP_Query в WordPress

Диагностика проблемы: почему пагинация не работает с WP_Query

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

Проверяем, что именно не так

  • Переходим на страницу пагинации, например, /page/2/.
  • Проверяем, меняется ли параметр paged в запросе (get_query_var('paged')).
  • Если параметр не меняется, значит, WP_Query всегда запрашивает первую страницу.
  • Если меняется, но контент не обновляется, значит, проблема в аргументах запроса.

Пошаговое решение: правильная настройка пагинации с WP_Query

Основное правило — передавать параметр paged в конструктор WP_Query, учитывая, что значение может быть в paged или page в зависимости от типа страницы.

Пример рабочего кода:

if (get_query_var('paged')) {
    $paged = get_query_var('paged');
} elseif (get_query_var('page')) {
    $paged = get_query_var('page');
} else {
    $paged = 1;
}

$args = [
    'post_type' => 'post',
    'posts_per_page' => 5,
    'paged' => $paged,
];

$custom_query = new WP_Query($args);

if ($custom_query->have_posts()) :
    while ($custom_query->have_posts()) : $custom_query->the_post();
        the_title('<h2>', '</h2>');
        the_excerpt();
    endwhile;

    // Вывод пагинации
    echo paginate_links([
        'total' => $custom_query->max_num_pages,
        'current' => $paged,
    ]);
endif;
wp_reset_postdata();

Почему так важно проверять оба параметра?

В зависимости от структуры permalink и контекста (страница, архив, главная) WordPress может передавать номер страницы в paged или page. Игнорируя это, вы рискуете всегда получать первую страницу.

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

  • Перейдите на страницу с пагинацией, например, /page/2/ или ?paged=2.
  • Убедитесь, что заголовки и контент изменились — отображаются записи со второй страницы.
  • Посмотрите на HTML пагинации — текущая страница должна подсвечиваться.
  • Проверьте консоль браузера на отсутствие JS-ошибок (если пагинация с AJAX).

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

  • Ошибка: Не передан параметр paged в WP_Query.
    Решение: Используйте проверку get_query_var('paged') и передавайте в аргументы запроса.
  • Ошибка: Использование глобального $wp_query без сброса после кастомного запроса.
    Решение: Всегда вызывайте wp_reset_postdata() после работы с WP_Query.
  • Ошибка: Конфликт с плагинами SEO, которые меняют структуру ссылок пагинации.
    Решение: Проверьте настройки плагинов (например, Clearfy Pro) на предмет изменения урлов пагинации и исключите конфликты.
  • Ошибка: Пагинация работает, но при клике на следующую страницу появляется 404.
    Решение: Обновите постоянные ссылки в настройках WordPress (Настройки —> Постоянные ссылки —> Сохранить изменения).

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

  • Не запрашивайте слишком много постов за один запрос — оптимально от 5 до 10 записей, чтобы не перегружать сервер.
  • Используйте no_found_rows => true в args, если не нужна пагинация, для ускорения запросов.
  • Кешируйте результаты сложных запросов с помощью Transients API или внешних кешей.
  • Проверяйте, чтобы пагинация корректно работала с пользовательскими ролями и правами доступа, если контент ограничен.

Сравнение вариантов реализации пагинации

ВариантПреимуществаНедостатки
Использование WP_Query с правильным pagedПолный контроль над запросом, гибкостьТребует ручной настройки, возможны ошибки если не передать paged
Использование глобального $wp_query (стандартный Loop)Простота, автоматическая работа пагинацииМеньше контроля, нельзя кастомизировать запрос
Плагины пагинации (WP-PageNavi и др.)Удобство, готовые стили и функцииЗависимость от стороннего кода, возможны конфликты

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

⭐⭐⭐⭐⭐
Как сделать пагинацию для WooCommerce с использованием WP-PageNavi
30.12.2025
Как сделать пагинацию для комплексных запросов WordPress с фильтрацией по таксономиям
25.03.2026
Пагинация WooCommerce не работает: причины и решение
02.05.2026
Как сделать пагинацию для комплексных запросов с meta-записями и таксономиями в WordPress
05.03.2026
Как сделать адаптивную пагинацию в WordPress: практические советы и примеры
05.11.2025
×
WordPress
дай сайту суперсилу!

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

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