Пагинация для комплексных запросов WordPress с фильтрацией по таксономиям

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

Основы пагинации в WP_Query для сложных запросов

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

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

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

Пример базового WP_Query с пагинацией и таксономией

$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$args = [
    'post_type' => 'post',
    'posts_per_page' => 10,
    'paged' => $paged,
    'tax_query' => [
        [
            'taxonomy' => 'category',
            'field' => 'slug',
            'terms' => 'novosti',
        ],
    ],
];
$query = new WP_Query($args);

Такой запрос отобразит посты из категории "novosti" с пагинацией по 10 записей на страницу.

Как реализовать пагинацию с несколькими фильтрами таксономий

Если нужно фильтровать посты сразу по нескольким таксономиям (например, категория + тег или кастомные таксономии), то tax_query становится массивом с несколькими условиями и параметром relation ('AND' или 'OR').

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

Пример построения сложного запроса с фильтрами и пагинацией

$paged = max(1, get_query_var('paged'));
$category = isset($_GET['category']) ? sanitize_text_field($_GET['category']) : '';
$tag = isset($_GET['tag']) ? sanitize_text_field($_GET['tag']) : '';

$tax_query = ['relation' => 'AND'];
if ($category) {
    $tax_query[] = [
        'taxonomy' => 'category',
        'field' => 'slug',
        'terms' => $category,
    ];
}
if ($tag) {
    $tax_query[] = [
        'taxonomy' => 'post_tag',
        'field' => 'slug',
        'terms' => $tag,
    ];
}

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

$query = new WP_Query($args);

Важно: если фильтры не заданы, то tax_query будет состоять только из relation, что может привести к ошибкам — нужно проверять и исключать пустые условия.

Вывод пагинации с сохранением фильтров в URL

Чтобы пагинация отображала правильные ссылки и сохраняла выбранные фильтры, нужно передавать параметры фильтрации в функцию генерации ссылок пагинации.

Пример использования paginate_links с фильтрами

$base = get_pagenum_link(1) . '%_%';
$format = 'page/%#%/';

// Сохраняем фильтры в параметрах
$query_args = [];
if ($category) $query_args['category'] = $category;
if ($tag) $query_args['tag'] = $tag;

$pagination = paginate_links([
    'base' => add_query_arg($query_args, $base),
    'format' => $format,
    'current' => $paged,
    'total' => $query->max_num_pages,
    'type' => 'list',
]);

echo $pagination;

Этот подход гарантирует, что при переходе по страницам выбранные фильтры не потеряются.

Оптимизация и кеширование комплексных запросов с пагинацией

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

Для кеширования можно применить Transients API или плагин Clearfy Pro, который оптимизирует запросы и кеширует данные.

Пример кеширования WP_Query с Transients API

$cache_key = 'wppagenavi_paged_' . $paged . '_' . md5(serialize($tax_query));
$query = get_transient($cache_key);
if (false === $query) {
    $query = new WP_Query($args);
    set_transient($cache_key, $query, HOUR_IN_SECONDS);
}

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

Использование плагина WP-PageNavi для кастомной пагинации с фильтрами

Плагин WP-PageNavi позволяет создавать удобную и стильную пагинацию. Он хорошо интегрируется с WP_Query и поддерживает кастомные параметры.

Для сохранения фильтров при навигации с WP-PageNavi нужно вручную добавлять параметры в ссылки, используя фильтр wp_pagenavi_extra_query_args.

Пример добавления фильтров в WP-PageNavi

add_filter('wp_pagenavi_extra_query_args', 'wppagenavi_add_filter_params');
function wppagenavi_add_filter_params() {
    $args = [];
    if (!empty($_GET['category'])) {
        $args['category'] = sanitize_text_field($_GET['category']);
    }
    if (!empty($_GET['tag'])) {
        $args['tag'] = sanitize_text_field($_GET['tag']);
    }
    return $args;
}

Этот код обеспечит корректное добавление параметров фильтрации к ссылкам пагинации.

Выводы и рекомендации по реализации пагинации для комплексных запросов с таксономиями

  • Всегда учитывайте параметр paged при формировании WP_Query.
  • Правильно строите массив tax_query с учетом всех фильтров.
  • Передавайте параметры фильтров в URL и ссылки пагинации, чтобы они сохранялись при переходах между страницами.
  • Используйте кеширование сложных запросов для оптимизации производительности.
  • Для удобного вывода пагинации можно использовать WP-PageNavi с добавлением параметров через фильтр.

Эти рекомендации помогут избежать типичных ошибок с пагинацией и фильтрами, а также улучшат пользовательский опыт и SEO вашего сайта.

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

⭐⭐⭐⭐⭐
Как сделать пагинацию для архива кастомного типа записей с WP-PageNavi
01.02.2026
Как сделать пагинацию для комплексных запросов с несколькими таксономиями в WordPress
03.04.2026
Как сделать отображение пагинации в WordPress для таблиц
05.12.2025
Как исправить ошибку 404 при переходе по страницам пагинации WooCommerce
20.05.2026
Как быстро исправить ошибку 404 при переходе по страницам пагинации в WordPress
06.05.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее