Jak ustawić różne ceny dla zalogowanych i niezalogowanych użytkowników?
Cześć!
Chciałabym w sklepie na WooCommerce ustawić inne ceny produktów dla zalogowanych użytkowników (np. niższe dla stałych klientów) i inne dla tych, którzy są niezalogowani. Czy da się to zrobić bez dużego kombinowania?
Szukam sposobu, żeby:
Zalogowany użytkownik widział specjalną, obniżoną cenę.
Osoba niezalogowana widziała standardową cenę.
Najlepiej, żeby dało się to ustawić automatycznie – np. dla całej kategorii lub wybranych produktów.
Czy są do tego jakieś wtyczki (najlepiej darmowe lub tanie), które się sprawdzają?
A może da się to ogarnąć jakimś prostym kodem w functions.php?
Będę wdzięczna za konkretne rozwiązania albo wskazówki, jak to technicznie ogarnąć.
1 Odpowiedź
Hej!
Da się, i to bez wielkiego kombinowania. Masz kilka dróg do wyboru – w zależności od tego, ile chcesz wydać i jak bardzo chcesz mieć kontrolę nad całością.
Wtyczki – najprostsza droga
Najczęściej polecaną wtyczką do tego typu zadań jest WooCommerce Dynamic Pricing & Discounts albo Role Based Pricing for WooCommerce. Ta druga jest prosta w obsłudze i ma darmową wersję, która w wielu przypadkach w zupełności wystarczy. Instalujesz, przypisujesz rolę „zalogowany użytkownik” do grupy z obniżoną ceną i gotowe. Możesz ustawiać rabaty procentowe albo stałe kwoty – dla całej kategorii lub wybranych produktów.
Warto też zerknąć na Discount Rules for WooCommerce – ma rozbudowaną darmową wersję i pozwala tworzyć reguły cenowe na podstawie wielu warunków, w tym statusu zalogowania.
Prosty kod w functions.php – jeśli wolisz bez wtyczki
Jeśli zależy Ci na jednym prostym warunku – zalogowany widzi niższą cenę, niezalogowany wyższą – możesz to ogarnąć kilkoma linijkami kodu w functions.php (najlepiej przez motyw potomny):
add_filter( 'woocommerce_product_get_price', 'cena_dla_zalogowanych', 10, 2 );
add_filter( 'woocommerce_product_get_regular_price', 'cena_dla_zalogowanych', 10, 2 );
function cena_dla_zalogowanych( $price, $product ) {
if ( is_user_logged_in() ) {
$price = $price * 0.9; // 10% rabatu dla zalogowanych
}
return $price;
}
Ten kod sprawdza, czy użytkownik jest zalogowany i jeśli tak – obniża cenę o 10%. Procent możesz dowolnie zmienić. Pamiętaj tylko, że to rozwiązanie działa globalnie na wszystkie produkty – jeśli chcesz różnicować po kategoriach, kod trzeba trochę rozbudować.
Ważna kwestia – role użytkowników
WooCommerce domyślnie przypisuje zarejestrowanym klientom rolę „Klient” (customer). Możesz to wykorzystać i zamiast warunku „czy zalogowany” użyć warunku „czy ma rolę klienta” – to daje większą elastyczność. Wtedy możesz np. stworzyć osobną rolę „stały klient” i przypisywać ją ręcznie albo automatycznie po określonej liczbie zamówień.
Co polecam w praktyce
Jeśli to prosta potrzeba – jeden próg rabatowy dla wszystkich zalogowanych – kod w functions.php wystarczy i nie obciąża sklepu dodatkową wtyczką. Jeśli chcesz różnicować rabaty po kategoriach, produktach albo rolach – wtyczka będzie wygodniejsza i bezpieczniejsza w utrzymaniu.
W obu przypadkach pamiętaj o testach na środowisku stagingowym przed wdrożeniem na żywy sklep. 😊