Як виправити пагінацію WooCommerce, що показує забагато сторінок після фільтрації
Якщо ваша пагінація WooCommerce відображає неправильні номери сторінок під час використання фільтрів продуктів WOOF (HUSKY), цей посібник допоможе це виправити.
Проблема
Симптом:Під час фільтрації продуктів за допомогою WOOF/HUSKY розбивка сторінок показує більше сторінок, ніж існує насправді.
приклад:
- Фільтр показує 15 продуктів (має бути 2 сторінки)
- Нумерація сторінок: 1, 2, 3, 4, 5… (5+ сторінок)
- Натиснувши сторінку 3+, ви побачите порожні результати або «Продукти не знайдено»
Що відбувається:Пагінація 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 для фільтрації продуктів
- ✅ Пагінація показує більше сторінок, ніж існує
- ✅ Натискання високих номерів сторінок не показує продуктів
- ✅ Кількість відфільтрованих результатів не відповідає нумерації сторінок