Исправление пагинации WooCommerce при фильтрации и сортировке

Диагностика проблемы с пагинацией в WooCommerce при фильтрах и сортировке

Часто при использовании стандартных фильтров WooCommerce (по цене, атрибутам) или сортировки товаров на страницах каталога пагинация перестаёт работать корректно: переход по страницам ведёт на страницу 404 или отображается неправильное количество товаров. Это происходит из-за того, что параметры фильтров не учитываются в запросах пагинации, и WordPress не может корректно построить URL или запрос.

Чтобы убедиться в проблеме, проверьте следующие моменты:

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

Почему пагинация ломается при фильтрации и сортировке в WooCommerce

WooCommerce строит пагинацию в зависимости от глобального запроса WordPress ($wp_query). Если фильтры или сортировка реализованы через GET-параметры, но не интегрированы в WP_Query или в rewrite rules, пагинация не учитывает эти параметры.

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

Пошаговое решение: как исправить пагинацию WooCommerce при фильтрах

1. Убедитесь, что используете стандартные WooCommerce хуки и классы

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

2. Правильно обрабатывайте параметр paged в кастомных WP_Query

Если у вас есть кастомный WP_Query на странице архива товаров, всегда передавайте в запрос текущую страницу:

$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;

$args = [
    'post_type' => 'product',
    'posts_per_page' => 12,
    'paged' => $paged,
    // другие параметры фильтрации
];
$query = new WP_Query($args);

3. Добавьте параметры фильтров в URL пагинации

Если фильтры реализованы через GET-параметры, их нужно передать в пагинацию с помощью paginate_links или в функции, генерирующей ссылки пагинации.

Пример генерации пагинации с сохранением параметров:

$current_page = max(1, get_query_var('paged'));
$base = get_pagenum_link(1) . '%_%';

$paginate_links = paginate_links([
    'base' => $base,
    'format' => 'page/%#%/',
    'current' => $current_page,
    'total' => $query->max_num_pages,
    'add_args' => $_GET, // сохраняем все GET параметры фильтров
]);
echo $paginate_links;

4. Используйте rewrite rules для SEO URL фильтров

Для более чистых URL фильтров и пагинации рекомендуется добавить кастомные rewrite rules, учитывающие параметры фильтров и пагинацию. Это улучшает SEO и избегает конфликтов.

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

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

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

  • Ошибка 404 при переходе по страницам пагинации: не передан параметр paged в WP_Query или не настроены rewrite rules. Исправить — добавить параметр paged и настроить ЧПУ.
  • Пагинация сбрасывается при смене фильтра: ссылки пагинации не сохраняют GET-параметры фильтров. Исправить — использовать параметр add_args в paginate_links или вручную добавлять параметры в ссылки.
  • Неправильное количество страниц: WP_Query не учитывает фильтры, или параметры не добавлены в запрос. Исправить — корректно формировать запрос с условиями фильтрации.

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

  • При обработке GET-параметров фильтров обязательно применяйте очистку данных (например, sanitize_text_field()) для защиты от XSS и инъекций.
  • Используйте кеширование результатов запросов, особенно при сложных фильтрах и большом количестве товаров, чтобы снизить нагрузку на базу данных.
  • Если используете AJAX-фильтры, пагинацию реализуйте через AJAX с обновлением URL с помощью History API для улучшения UX и SEO.

Сравнение способов реализации пагинации с фильтрами в WooCommerce

СпособПлюсыМинусыРекомендуемая ситуация
Стандартные WooCommerce фильтры и пагинацияПростота; совместимость; SEO-дружелюбностьОграниченные возможности кастомизацииСтандартный магазин без сложных фильтров
Кастомный WP_Query с передачей параметра paged и add_argsГибкость; контроль над запросомТребует знаний; можно сломать пагинацию при ошибкахКастомные шаблоны товаров, фильтры
AJAX-фильтры с пагинацией и History APIУлучшенный UX; плавная навигацияСложнее в реализации; может влиять на SEOСовременные магазины с большим трафиком

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

⭐⭐⭐⭐⭐
Как добавить пагинацию в WordPress для комплексных запросов с помощью WP_Query
12.03.2026
Как сделать пагинацию для контента в Page Builder WordPress
16.01.2026
Как создать динамическую пагинацию в WordPress с AJAX
08.11.2025
Как удалить пагинацию в WordPress без плагинов: практическое руководство
21.11.2025
Как исправить неработающую пагинацию в WooCommerce при кастомных WP_Query
07.06.2026
×
-15%
на премиум плагин
My Popup

Повысьте конверсию!

Получить скидку »