Zmiana ilości produktów wyświetlanych na stronie
Kod prosty, znaleźć można go w całym internecie i dokumentacji woo a jednak ostatnio mi się przydał ponownie. Sytuacja wcale nie jest oczywista, użytkownik ma prawo myśleć że przeglądając zakładkę z ustawieniami woocommerce trafi na możliwość ustawienia ilości wyświetlanych produktów na stronie kategorii lub stronie wyszukiwania produktu. A tak nie jest. I wcale nie ułatwia tego fakt, że w nowej wersji wtyczki sklepowej sporo ustawień zostało przeniesionych (ukrytych) w Personalizacji strony (Wygląd->Personalizacja->Ustawienia Woocommerce). Tam też nie ma takich ustawień. Ponieważ…? Ponieważ w wordpressie wszystko jest postem 🙂 – najczęściej powtarzane zdanie na tym blogu. I ilość wyświetlanych produktów będzie taka jak ilość wyświetlanych wpisów na stronie.
Z pomocą idzie nam filtr loop_shop_per_page
add_filter( 'loop_shop_per_page', 'nowy_loop_shop_per_page', 20 ); function nowy_loop_shop_per_page( $cols ) { // $cols zmienna zawierająca aktualną liczbę produktów na stronie oparta o wartość z Ustawienia -> Czytanie $cols = 20; // nadpisujemy jej wartość i zwracamy w funkcji return $cols; }
Żeby było bardziej optymalnie to ten sam kod w jednej linijce:
add_filter( 'loop_shop_per_page', create_function( '$cols', 'return 20;' ), 20 );
Powyższy kod zmienia nam jedynie ilość wyświetlanych produktów w sklepie, nie ruszając ilości postów na stronie i to jest jego zaleta.
Należy pamiętać, że wiele gotowych templatek (a teraz to już właściwie całych frameworków z wbudowanymi builderami stron) posiada ustawienia ręczne do zmiany ilości produktów wyświetlanych na stronie
Spotkałem się wczoraj z pokrętnym rozwiązaniem tego tematu, które wykorzystywało akcję pre_get_posts. Akcja wywołuje się po utworzeniu obiektu zmiennej zapytania, ale przed uruchomieniem rzeczywistego zapytania, co pozwala na jego modyfikację. Np. gdy na stronie głównej chcemy wyświetlić wpisy tylko z jednej kategorii i w określonej ilości. Temat okazał się tak ciekawy, że postanowiłem niebawem poświęcić mu osobny wpis.