Диагностика проблемы с навигацией по товарам в WooCommerce
Навигация по товарам (страницы пагинации, сортировки, фильтры) — ключевой элемент удобства в интернет-магазине. Часто встречается ситуация, когда пагинация не работает: страницы с товарами либо не переключаются, либо приводят на 404 ошибку, либо отображают неверный набор товаров. Аналогично может сломаться сортировка или фильтры по атрибутам.
Основные причины:
- Неправильные настройки постоянных ссылок (Permalinks);
- Конфликты с темой или плагинами, изменяющими запросы WP_Query;
- Ошибки в кастомном коде, переопределяющем запрос товаров;
- Кэширование, которое не учитывает параметры пагинации или сортировки;
- Отсутствие или некорректная работа хуков WooCommerce для пагинации.
Пошаговое решение: диагностика и исправление
1. Проверка постоянных ссылок
Перейдите в Консоль > Настройки > Постоянные ссылки и просто сохраните настройки заново без изменений. Это сбросит правила перезаписи (rewrite rules).
2. Отключение конфликтующих плагинов и смена темы
Временно переключитесь на стандартную тему, например Storefront, и отключите все плагины, кроме WooCommerce. Проверьте, работает ли пагинация. Если да — причина в конфликте.
3. Проверка кастомного кода, изменяющего запрос товаров
Если в functions.php или подключаемых плагинах есть фильтры на pre_get_posts или woocommerce_product_query, временно отключите их для проверки.
add_action('pre_get_posts', 'disable_custom_queries_for_test', 99); function disable_custom_queries_for_test($query) { if (!is_admin() && $query->is_main_query() && is_post_type_archive('product')) { remove_action('pre_get_posts', 'your_custom_query_function', 10); } }4. Проверка кэширования
Очистите кэш сайта, браузера и, если используется, кэш на уровне сервера или CDN. Убедитесь, что параметры пагинации учитываются в ключах кэша.
5. Правильное использование функций пагинации
Убедитесь, что в шаблоне магазина вызывается стандартный код пагинации WooCommerce:
if ( function_exists('woocommerce_pagination') ) { woocommerce_pagination(); }Если пагинация реализована вручную, используйте:
the_posts_pagination(array( 'mid_size' => 2 ));Проверка результата после внедрения
- Перейдите на страницу магазина или категории с товарами.
- Попробуйте перейти на другие страницы пагинации, используя ссылки внизу.
- Проверьте, что URL меняется корректно (например,
/product/page/2/). - Убедитесь, что на каждой странице отображаются разные товары без повторов.
- Проверьте сортировку и фильтры, если они есть, на корректность работы.
Частые ошибки и как их исправить
- 404 ошибка при переходе на вторую и последующие страницы пагинации: Обычно вызвана некорректными правилами перезаписи. Решение — сбросить постоянные ссылки через настройки.
- Пагинация есть, но при переходе на другие страницы отображаются те же товары: Возможно, кастомный фильтр запросов не учитывает параметр
paged. Проверьте и исправьте логику вpre_get_posts. - Пагинация не показывается вообще: Убедитесь, что в теме вызвана функция
woocommerce_pagination()или аналогичная. - Кэширование возвращает старые страницы: Проверьте ключи кэша, исключите пагинацию из агрегации кеша.
Практические советы по производительности и безопасности
- Используйте серверное кэширование с учётом параметров пагинации и сортировки — например, плагин LiteSpeed Cache или WP Rocket с настройками исключения динамических параметров.
- Избегайте тяжелых запросов с большим количеством JOIN или фильтров в
pre_get_posts— лучше использовать встроенные WooCommerce методы. - Регулярно обновляйте WooCommerce и тему, чтобы избежать багов в пагинации.
- Для больших магазинов рассмотрите использование ElasticPress или внешнего поиска для ускорения навигации.
Сравнение вариантов решения проблемы пагинации
| Подход | Плюсы | Минусы |
|---|---|---|
| Сброс постоянных ссылок | Быстро и просто решает большинство проблем с 404 | Не устраняет конфликты кода или плагинов |
| Отключение конфликтных плагинов/тем | Выявляет источник проблемы | Требует времени и тестирования |
| Исправление кастомных фильтров | Полное устранение ошибки на уровне кода | Требует навыков PHP и понимания WP_Query |
| Настройка кэширования | Улучшение производительности без потери функционала | Сложность настройки и тестирования |