Как исправить неработающую пагинацию при пользовательских запросах WP_Query в WordPress

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

Одной из частых проблем при создании пользовательских запросов через WP_Query является неработающая или некорректная пагинация. Например, при переходе на следующую страницу пагинации URL меняется, но контент не обновляется, либо отображается 404 ошибка. Основные причины обычно связаны с неправильной настройкой параметров запроса, конфликтом с глобальной переменной $paged или ошибками в структуре ссылок (Permalinks).

Что проверить в первую очередь?

  • Правильно ли передается номер текущей страницы в параметре paged запроса WP_Query.
  • Используется ли глобальная переменная $paged и корректно ли она инициализирована.
  • Совместимы ли настройки постоянных ссылок с пагинацией (например, включен ли режим «Произвольные ссылки»).
  • Не конфликтует ли ваш кастомный запрос с основным запросом WordPress (main query).

Пошаговое решение корректной пагинации в WP_Query

1. Получаем текущую страницу

Обязательно используйте глобальную переменную $paged и проверяйте её наличие. Вот проверенный шаблон:

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

При создании запроса указывайте параметр paged с полученным значением:

$args = array(
    'post_type' => 'post',
    'posts_per_page' => 5,
    'paged' => $paged
);

$custom_query = new WP_Query($args);

3. Построение пагинации

Для вывода навигации используйте функцию paginate_links(), передавая все необходимые параметры:

$big = 999999999; // числовой плейсхолдер для замены

echo paginate_links(array(
    'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
    'format' => '?paged=%#%',
    'current' => max(1, $paged),
    'total' => $custom_query->max_num_pages
));

4. Поддержка пользовательских типов записей и таксономий

Если пагинация не работает для кастомных типов записей или архивов таксономий, убедитесь, что в functions.php для регистрации CPT указан параметр 'has_archive' => true, и что для таксономий правильно настроены rewrite правила.

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

Чтобы проверить корректность работы пагинации, выполните следующие действия:

  • Откройте страницу с пользовательским запросом и пагинацией.
  • Проверьте, что URL при переходе на следующую страницу меняет параметр paged (например, /page/2/).
  • Убедитесь, что контент меняется в соответствии с номером страницы.
  • Проверьте, что не возникает ошибок 404 или пустых страниц.
  • Просмотрите исходный код пагинации, чтобы ссылки были сформированы корректно.

Частые ошибки и способы их исправления

  • Игнорирование paged в запросе: Если не передать paged в WP_Query, пагинация не будет работать. Решение — всегда передавайте параметр.
  • Неправильное получение номера страницы: Использование get_query_var('paged') без проверки get_query_var('page') может приводить к ошибкам, особенно на главной странице или в статических страницах.
  • Конфликт с main query: Запросы, созданные без wp_reset_postdata() после вывода, могут ломать пагинацию. Не забывайте сбрасывать глобальные данные.
  • Проблемы с постоянными ссылками: Если структура ссылок не поддерживает пагинацию, может возникать 404. Решение — перейти в настройки «Постоянные ссылки» и сохранить их заново.

Практические советы по оптимизации и безопасности

  • Для больших сайтов используйте posts_per_page не больше 10-20, чтобы не нагружать сервер.
  • Применяйте кеширование страниц пагинации (например, через плагин Clearfy Pro https://wpshop.ru/plugins/clearfy?utm_source=wppagenavi.ru&utm_medium=article&utm_campaign=kak-ispravit-ne-rabotayushhuyu-paginaciyu-pri-polzovatelnyh-zaprosah-wp_query) для повышения производительности.
  • Избегайте дублирующего контента на страницах пагинации, корректно настраивая мета-теги rel="canonical".
  • Всегда вызывайте wp_reset_postdata() после кастомного запроса, чтобы не влиять на основной цикл WordPress.

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

СпособПреимуществаНедостатки
Ручная настройка с WP_Query и paginate_links()Полный контроль над выводом, гибкостьТребует знания WP API, больше кода
Плагины (например, WP-PageNavi)Простота установки, готовый функционалМожет конфликтовать с кастомными запросами, ограниченная кастомизация
AJAX пагинацияУлучшенный UX, без перезагрузки страницыСложнее в реализации, требует JS и серверной логики

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

⭐⭐⭐⭐⭐
Как добавить пагинацию в кастомный блок Gutenberg в WordPress
22.03.2026
Как сделать пагинацию для комплексных запросов с meta-записями в WordPress
25.02.2026
Как добавить пагинацию в WP Admin для кастомных типов записей
28.03.2026
Как создать динамическую пагинацию в WordPress с AJAX
08.11.2025
Как сделать пагинацию для комплексных запросов с meta-записями и таксономиями в WordPress
08.03.2026
×
WordPress
дай сайту суперсилу!

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

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