Jak naprawić paginację WooCommerce pokazującą zbyt wiele stron podczas filtrowania
Jeśli paginacja Twojego WooCommerce wyświetla nieprawidłowe numery stron podczas korzystania z filtrów produktów WOOF (HUSKY), ten poradnik rozwiąże problem.
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+ powoduje wyświetlenie pustych wyników lub komunikatu „Nie znaleziono produktów”
Co się dzieje: Paginacja WooCommerce oblicza liczbę stron na podstawie całego katalogu produktów, a nie przefiltrowanych wyników. WOOF filtruje produkty, ale paginacja nie aktualizuje się odpowiednio.
Rozwiązanie
Dodaj ten kod, aby wymusić na paginacji użycie prawidłowej liczby stron z przefiltrowanego zapytania WOOF.
Krok 1: Dodanie kodu
Dodaj go do pliku functions.php swojego motywu potomnego:
/**
* 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 ten kod zostanie wykonany po innych modyfikacjach paginacji.
Krok 2: Wyczyść pamięć podręczną
- Wyczyść pamięć podręczną WordPress (jeśli używasz wtyczki cache)
- Wyczyść pamięć podręczną przeglądarki (Ctrl+F5)
- Przetestuj przefiltrowane wyniki
Krok 3: Weryfikacja
- Zastosuj dowolny filtr WOOF (kategoria, cena, atrybuty)
- Sprawdź paginację na dole strony
- Numery stron powinny teraz odpowiadać faktycznym przefiltrowanym wynikom
Przed naprawą:
Showing 12 products Pages: 1 2 3 4 5 6 7 8 (wrong!)
Po naprawie:
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: Zastępuje całkowitą liczbę stron paginacji WooCommerce rzeczywistą liczbą stron z przefiltrowanego zapytania WordPress.
Dlaczego priorytet 999? Niektóre motywy lub wtyczki modyfikują paginację. Priorytet 999 zapewnia, że ten kod zostanie wykonany jako ostatni i będzie nadrzędny.
Rozwiązywanie problemów
Paginacja nadal nie działa poprawnie
Problem: Liczba stron nadal jest nieprawidłowa po dodaniu kodu
Możliwe przyczyny:
- Kod nie znajduje się w motywie potomnym
- Sprawdź, czy edytujesz plik functions.php motywu potomnego
- Aktualizacje motywu nadrzędnego usuną kod, jeśli nie znajduje się w motywie potomnym
- Pamięć podręczna nie została wyczyszczona
- Wyczyść pamięć podręczną wtyczki WordPress
- Wyczyść pamięć podręczną serwera (panel hostingowy)
- Przetestuj w trybie incognito
- Motyw nadpisuje paginację
- Niektóre motywy używają niestandardowych funkcji paginacji
- Spróbuj zwiększyć priorytet do 9999
- Sprawdź dokumentację motywu
Rozwiązanie: Zwiększ priorytet, jeśli motyw powoduje konflikt:
add_filter('woocommerce_pagination_args', function($args) {
// ... code ...
}, 9999); // Higher priority
Kiedy ta naprawa jest potrzebna
Ta naprawa jest potrzebna, jeśli:
- ✅ Używasz WOOF/HUSKY do filtrowania produktów
- ✅ Paginacja pokazuje więcej stron niż faktycznie istnieje
- ✅ Kliknięcie wyższych numerów stron nie wyświetla produktów
- ✅ Liczba przefiltrowanych wyników nie zgadza się z paginacją