Как исправить пагинацию, показывающую слишком много страниц при фильтрации WOOF
Если ваша пагинация WooCommerce показывает неправильное количество страниц при использовании фильтров товаров WOOF (HUSKY), это руководство поможет это исправить.
Проблема
Симптом: При фильтрации товаров через WOOF/HUSKY пагинация показывает больше страниц, чем существует на самом деле.
Пример:
- Фильтр показывает 15 товаров (должно быть 2 страницы)
- Пагинация показывает: 1, 2, 3, 4, 5… (5+ страниц)
- При нажатии на страницу 3+ показываются пустые результаты или “No products found”
Что происходит: Пагинация WooCommerce рассчитывает количество страниц на основе общего каталога товаров, а не отфильтрованных результатов. WOOF фильтрует товары, но пагинация не обновляется соответствующим образом.
Решение
Добавьте этот код, чтобы заставить пагинацию использовать правильное количество страниц из отфильтрованного запроса WOOF.
Шаг 1: Добавьте код
Добавьте это в functions.php вашей дочерней темы:
/**
* Fix pagination page count when using WOOF filtering
* Forces pagination to use correct max_num_pages from filtered query
*/
add_filter('woocommerce_pagination_args', function($args) {
global $wp_query, $WOOF;
// Check if WOOF filtering is active
if ($WOOF->is_isset_in_request_data($WOOF->get_swoof_search_slug())) {
// Force correct page count from HUSKY filtered query
$args['total'] = $wp_query->max_num_pages;
}
return $args;
}, 999);
Приоритет 999: Гарантирует, что этот код выполнится после других изменений пагинации.
Шаг 2: Очистите кэш
- Очистите кэш WordPress (если используется плагин кэширования)
- Очистите кэш браузера (Ctrl+F5)
- Проверьте отфильтрованные результаты
Шаг 3: Проверка
- Примените любой фильтр WOOF (категория, цена, атрибуты)
- Проверьте пагинацию в нижней части страницы
- Номера страниц теперь должны соответствовать фактическим отфильтрованным результатам
До исправления:
Showing 12 products Pages: 1 2 3 4 5 6 7 8 (wrong!)
После исправления:
Showing 12 products Pages: 1 2 (correct!)
Как это работает
if ($WOOF->is_isset_in_request_data($WOOF->get_swoof_search_slug())) {
Что это делает: Проверяет, активна ли в данный момент фильтрация WOOF, ища поисковый параметр WOOF в URL.
$args['total'] = $wp_query->max_num_pages;
Что это делает: Переопределяет общее количество страниц пагинации WooCommerce фактическим количеством страниц из отфильтрованного запроса WordPress.
Почему приоритет 999? Некоторые темы или плагины изменяют пагинацию. Приоритет 999 гарантирует, что этот код выполнится последним и будет иметь приоритет.
Решение проблем
Пагинация всё ещё неправильная
Проблема: Количество страниц всё ещё неправильное после добавления кода
Возможные причины:
- Код не в дочерней теме
- Убедитесь, что вы редактируете functions.php дочерней темы
- Обновления родительской темы удалят код, если он не в дочерней теме
- Кэш не очищен
- Очистите плагин кэширования WordPress
- Очистите кэш сервера (панель хостинга)
- Проверьте в режиме инкогнито
- Тема переопределяет пагинацию
- Некоторые темы используют собственные функции пагинации
- Попробуйте увеличить приоритет до 9999
- Проверьте документацию темы
Решение: Увеличьте приоритет при конфликтах с темой:
add_filter('woocommerce_pagination_args', function($args) {
// ... code ...
}, 9999); // Higher priority
Когда нужно это исправление
Вам нужно это исправление, если:
- ✅ Используете WOOF/HUSKY для фильтрации товаров
- ✅ Пагинация показывает больше страниц, чем существует
- ✅ При нажатии на высокие номера страниц не показывается товаров
- ✅ Количество отфильтрованных результатов не совпадает с пагинацией