Как исправить ошибку 404 при пагинации с несколькими WP_Query на одной странице в WordPress

Диагностика проблемы: почему возникает ошибка 404 при пагинации с несколькими WP_Query

При использовании нескольких кастомных запросов WP_Query на одной странице с пагинацией часто возникает ошибка 404 при переходе на страницы пагинации. Это происходит из-за конфликта параметра paged, который по умолчанию применяется ко всем запросам и влияет на URL, а WordPress не может корректно определить, к какому именно запросу относится текущая страница.

Типичные симптомы проблемы:

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

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

Шаг 1. Передача отдельных параметров пагинации

Для каждого запроса нужно использовать свой параметр пагинации, чтобы избежать конфликтов. Например, для первого запроса paged будет браться из paged, для второго — из paged2 и т.д.

function get_current_paged($key = 'paged') {
    if (get_query_var($key)) {
        return intval(get_query_var($key));
    } elseif (isset($_GET[$key])) {
        return intval($_GET[$key]);
    }
    return 1;
}

$paged1 = get_current_paged('paged');
$paged2 = get_current_paged('paged2');

Шаг 2. Объявление дополнительных параметров пагинации в WordPress

Чтобы WordPress распознавал дополнительные параметры, их нужно добавить в query_vars через фильтр:

function add_custom_paged_query_vars($vars) {
    $vars[] = 'paged2';
    return $vars;
}
add_filter('query_vars', 'add_custom_paged_query_vars');

Шаг 3. Создание двух WP_Query с разными параметрами пагинации

$args1 = [
    'post_type' => 'post',
    'posts_per_page' => 5,
    'paged' => $paged1,
];
$query1 = new WP_Query($args1);

$args2 = [
    'post_type' => 'product',
    'posts_per_page' => 4,
    'paged' => $paged2,
];
$query2 = new WP_Query($args2);

Шаг 4. Генерация ссылок пагинации с кастомными параметрами

Для второго запроса необходимо вручную формировать ссылки пагинации с параметром paged2. Пример функции:

function custom_paginate_links($current_page, $max_page, $paged_var) {
    return paginate_links([
        'base' => add_query_arg($paged_var, '%#%'),
        'format' => '',
        'current' => $current_page,
        'total' => $max_page,
        'type' => 'list',
    ]);
}

echo custom_paginate_links($paged1, $query1->max_num_pages, 'paged');
echo custom_paginate_links($paged2, $query2->max_num_pages, 'paged2');

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

  • Перейдите на страницу с несколькими WP_Query и нажмите пагинацию для каждого из списков;
  • Убедитесь, что URL меняется корректно: для первого запроса параметр paged, для второго — paged2;
  • Проверяйте, что содержимое каждой секции меняется согласно выбранной странице, а 404 ошибка не появляется;
  • Проверьте работу пагинации с разными комбинациями параметров и обновлением страницы.

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

  • Отсутствие регистрации параметров пагинации в query_vars: WordPress не распознает кастомные параметры paged2 и др. Решение — добавить их через фильтр query_vars.
  • Использование одного параметра paged для всех запросов: приводит к конфликтам и ошибке 404. Нужно разделять параметры пагинации.
  • Неправильное формирование ссылок пагинации: если ссылки не содержат нужных параметров, переходы приводят к 404 или неправильному результату.
  • Не сбрасывается wp_reset_postdata() после каждого запроса: может привести к неправильному отображению данных и пагинации.

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

  • Используйте intval() для всех параметров пагинации, чтобы избежать внедрения вредоносного кода через URL.
  • Минимизируйте количество запросов WP_Query на одной странице, чтобы не перегружать базу данных.
  • Разграничивайте пагинацию по параметрам, чтобы не путать логику и избежать избыточных вычислений.
  • Кешируйте результаты запросов при возможности, особенно для сложных фильтров и больших объемов данных.

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

ВариантПреимуществаНедостатки
Использование одного параметра pagedПростота кода, стандартная пагинацияКонфликты, ошибки 404, не работает с несколькими запросами
Использование отдельных параметров (paged2, paged3)Корректная работа с несколькими WP_Query, гибкостьУсложнение URL и кода, требуется регистрация параметров
AJAX пагинация с передачей параметровУлучшенный UX, нет перезагрузки страницыСложная реализация, требует JS и обработки запросов

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

⭐⭐⭐⭐⭐
Как исправить несоответствие пагинации при использовании WP_Query в WordPress
21.04.2026
Как использовать пагинацию с AJAX и кешированием в WP-PageNavi
28.01.2026
Как быстро исправить ошибку 404 при переходе по страницам пагинации в WordPress
06.05.2026
Как сделать пагинацию для постов по датам в WordPress
15.12.2025
Как исправить дубли страниц пагинации в WordPress и убрать лишние URL из индекса
16.08.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше