Jak naprawić paginację wyświetlającą zbyt wiele stron przy filtrowaniu WOOF
Jeśli paginacja WooCommerce wyświetla nieprawidłowe numery stron podczas korzystania z filtrów produktów WOOF (HUSKY), ten przewodnik pomoże to naprawić.
Problem
Objaw: Podczas filtrowania produktów za pomocą WOOF/HUSKY, paginacja pokazuje więcej stron niż faktycznie istnieje.
Przykład:
- Filtr pokazuje 15 produktów (powinny być 2 strony)
- Paginacja wyświetla: 1, 2, 3, 4, 5… (5+ stron)
- Kliknięcie strony 3+ pokazuje puste wyniki lub „Nie znaleziono produktów”
Co się dzieje: Paginacja WooCommerce oblicza liczbę stron na podstawie całkowitego katalogu produktów, a nie przefiltrowanych wyników. WOOF filtruje produkty, ale paginacja nie jest odpowiednio aktualizowana.
Rozwiązanie
Dodaj ten kod, aby wymusić użycie poprawnej liczby stron przez paginację z zapytania filtrowanego WOOF.
Krok 1: Dodaj kod
Dodaj to do swojego motywu potomnego 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);
Priorytet 999: Zapewnia, że działa to po innych modyfikacjach paginacji.
Krok 2: Wyczyść pamięć podręczną
- Wyczyść pamięć podręczną WordPress (jeśli używasz wtyczki do pamięci podręcznej)
- Wyczyść pamięć podręczną przeglądarki (Ctrl+F5)
- Testuj przefiltrowane wyniki
Krok 3: Zweryfikuj
- Zastosuj dowolny filtr WOOF (kategoria, cena, atrybuty)
- Sprawdź paginację na dole strony
- Numery stron powinny teraz odpowiadać rzeczywistym przefiltrowanym wynikom
Przed poprawką:
Showing 12 products Pages: 1 2 3 4 5 6 7 8 (wrong!)
Po naprawieniu:
Showing 12 products Pages: 1 2 (correct!)
Jak to działa
if ($WOOF->is_isset_in_request_data($WOOF->get_swoof_search_slug())) {
Co to robi: Sprawdza, czy filtrowanie WOOF jest aktualnie aktywne, szukając parametru wyszukiwania WOOF w adresie URL.
$args['total'] = $wp_query->max_num_pages;
Co to robi: Nadpisuje sumę paginacji WooCommerce z faktyczną liczbą stron z przefiltrowanego zapytania WordPress.
Dlaczego priorytet 999? Niektóre motywy lub pluginy modyfikują paginację. Priorytet 999 zapewnia, że ten kod zostanie uruchomiony jako ostatni i ma pierwszeństwo.
Rozwiązywanie problemów
Paginacja nadal nieprawidłowa
Problem: Liczba stron nadal nieprawidłowa po dodaniu kodu
Możliwe przyczyny:
- Kod nie w motywie potomnym
- Sprawdź, czy edytujesz plik functions.php motywu potomnego
- Aktualizacje motywu nadrzędnego wymażą kod, jeśli nie jest w motywie podrzędnym
- Pamięć podręczna nie została wyczyszczona
- Wyczyść wtyczkę pamięci podręcznej WordPress
- Wyczyść pamięć podręczną serwera (panel hostingowy)
- Testuj w trybie incognito
- Paginacja nadpisująca motyw
- Niektóre motywy używają niestandardowych funkcji paginacji
- Spróbuj zwiększyć priorytet do 9999
- Sprawdź dokumentację motywu
Rozwiązanie: Zwiększ priorytet w przypadku konfliktów motywu:
add_filter('woocommerce_pagination_args', function($args) {
// ... code ...
}, 9999); // Higher priority
Kiedy ta poprawka jest potrzebna
Potrzebujesz tej poprawki, jeśli:
- ✅ Używanie WOOF/HUSKY do filtrowania produktów
- ✅ Paginacja pokazuje więcej stron niż istnieje
- ✅ Klikanie wysokich numerów stron nie pokazuje produktów
- ✅ Liczba przefiltrowanych wyników nie pasuje do paginacji