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
[php]
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;
}
[/php]
Żeby było bardziej optymalnie to ten sam kod w jednej linijce:
[php]
add_filter( 'loop_shop_per_page’, create_function( '$cols’, 'return 20;’ ), 20 );
[/php]
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.