Masz sklep internetowy i chcesz, aby ceny produktów były widoczne tylko dla zalogowanych użytkowników? Jeśli tak, to świetnie trafiłeś! W artykule tym przedstawię prosty sposób na zrealizowanie tego zadania bez użycia wtyczki. Wystarczy skopiować gotowy kod i wkleić go do jednego pliku w aktualnie zainstalowanym motywie. Dla bardziej dociekliwych dodałam krótki opis 😉
Ceny tylko dla zalogowanych użytkowników – co jest do ukrycia
Jeśli chcemy pozostawić ceny widoczne tylko dla zalogowanych użytkowników, to musimy dokonać zmian w dwóch miejscach. Po pierwsze należy ukryć cenę i przycisk „Dodaj do koszyka” w katalogu produktów. Po drugie te dwa elementy musimy ukryć także na stronie z pojedynczym produktem. Na koniec warto przy każdym produkcie umieścić informację, że ceny widoczne są po zalogowaniu. Informację tą można podlinkować do formularza rejestracji/logowania.
Gdzie wprowadzamy zmiany
Wszystkie zmiany wprowadzamy w pliku functions.php. Plik ten znajduje się w głównym folderze z naszym motywem: wp-content -> themes -> Twój motyw -> functions.php.
Połącz się z serwerem poprzez FTP, skopiuj plik functions.php i otwórz go w dowolnym edytorze kodu (polecam edytor kodu Atom). Zobacz jak połączyć się z serwerem przy pomocy programu WinSCP. Artykuł jest głównie o tym, jak wykonać kopię zapasową, ale poniżej znajduje się krótki tutorial do WinSCP.
Ukrywamy cenę i przycisk w katalogu produktów
W pierwszej kolejności zajmiemy się ukryciem ceny i przycisku „Dodaj do koszyka” w katalogu produktów. Zadanie to wykonamy przy użyciu poniższego kodu.
add_action( 'init', 'fanka_kodowania_prices_only_for_logged_user' );
function fanka_kodowania_prices_only_for_logged_user()
{
if ( ! is_user_logged_in() )
{
//usunięcie przycisku "Dodaj do koszyka" w katalogu produktów
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
//usunięcie ceny w katalogu produktów
remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 );
}
}
W kodzie znajduje się instrukcja warunkowa sprawdzająca, czy użytkownik jest zalogowany. Jeśli nie jest, to ukrywana jest cena i przycisk „Dodaj do koszyka”.
Ukrywamy cenę i przycisk na stronie z pojedynczym produktem
Do ukrycia ceny i przycisku na stronie z pojedynczym produktem wykorzystamy wcześniejszą funkcję. Dodamy do niej dwie linijki do usuwania akcji.
//usunięcie przycisku "Dodaj do koszyka" na stronie z pojedynczym produktem
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
//usunięcie ceny na stronie z pojedynczym produktem
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
Teraz kod będzie miał postać:
add_action( 'init', 'fanka_kodowania_prices_only_for_logged_user' );
function fanka_kodowania_prices_only_for_logged_user()
{
if ( ! is_user_logged_in() )
{
//usunięcie przycisku "Dodaj do koszyka" w katalogu produktów
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
//usunięcie ceny w katalogu produktów
remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 );
//usunięcie przycisku "Dodaj do koszyka" na stronie z pojedynczym produktem
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
//usunięcie ceny na stronie z pojedynczym produktem
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
}
}
Dodajemy link przekierowujący do rejestracji / logowania
To zadanie również nie jest trudne. Najpierw utworzymy funkcję generującą link:
function fanka_kodowania_my_account_link() {
echo '<a href="' . get_permalink(wc_get_page_id('myaccount')) . '">' . __('Ceny widoczne po zalogowaniu', 'nazwa_motywu') . '</a>';
}
Link jest dostosowany do wielojęzyczności, dlatego tekst jest opakowany w funkcję __(. Żeby wszystko zadziałało, musisz dodać nazwę swojego motywu, tam gdzie jest tekst nazwa motywu.
Teraz musimy jedynie podpiąć link do produktów w katalogu, a także na stronie z pojedynczym produktem. Ostatecznie kod będzie miał postać:
add_action( 'init', 'fanka_kodowania_prices_only_for_logged_user' );
function fanka_kodowania_prices_only_for_logged_user()
{
if ( ! is_user_logged_in() )
{
//usunięcie przycisku "Dodaj do koszyka" w katalogu produktów
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
//usunięcie ceny w katalogu produktów
remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 );
//usunięcie przycisku "Dodaj do koszyka" na stronie z pojedynczym produktem
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
//usunięcie ceny na stronie z pojedynczym produktem
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
}
//dodanie linku do katalogu produktów
add_action( 'woocommerce_after_shop_loop_item', 'fanka_kodowania_my_account_link', 11 );
//dodanie linku na stronie z pojedynczym produktem
add_action( 'woocommerce_single_product_summary', 'fanka_kodowania_my_account_link', 31 );
}
function fanka_kodowania_my_account_link() {
echo '<a href="' . get_permalink(wc_get_page_id('myaccount')) . '">' . __('Ceny widoczne po zalogowaniu', 'nazwa_motywu') . '</a>';
}
Tak więc wystarczy, że skopiujesz powyższy kod do pliku functions.php i zmienisz nazwę motywu. Od teraz ceny i przycisk „Dodaj do koszyka” widoczne są jedynie dla zalogowanych użtkowników 🙂
Super przydało się! Pytanie czy można dopisać kod aby po zalogowaniu nie był widoczny link 'Ceny widoczne po zalogowaniu’?
Cieszę się, że artykuł jest przydatny 🙂
Link jest widoczny wyłącznie dla niezalogowanych użytkowników. Natomiast jeśli link ma być w ogóle niewidoczny, to proszę pominąć ostatni punkt artykułu, w którym jest on dodawany.
Dziękuję za odpowiedź. Chce aby link przed zamówieniem byl widoczny, a już po nie. Pozdrawiam
Najprostszym rozwiązaniem będzie użycie wtyczki: Maximum Products per User for WooCommerce.
Ten kod dobrze nie działa.
Kod ↓
//usunięcie przycisku „Dodaj do koszyka” na stronie z pojedynczym produktem
remove_action( 'woocommerce_single_product_summary’, 'woocommerce_template_single_add_to_cart’, 30 );
//usunięcie ceny na stronie z pojedynczym produktem
remove_action( 'woocommerce_single_product_summary’, 'woocommerce_template_single_price’, 10 );
usuwa obsługę również dla uwierzytelnianionych
Czy zastosował Pan instrukcję warunkową if sprawdzającą, czy użytkownik nie jest zalogowany?
if (!is_user_logged_in())
Bardzo dobra wskazówka jednak w moim przypadku nie wszystko działa mam motyw Divi, po wpisaniu nazwy motywu cana się wyświetla na karcie produktu bez zalogowania – co mogę zrobić? Tak to wygląda na stronie chemia.la.pl
Kod bardzo pomocny- wykorzystałem u siebie, dziękuję. Mam zainstalowany motyw Neve.
Żeby napis „ceny widoczne po zalogowaniu” NIE był widoczny jak będzie użytkownika zalogowany. Wystarczy nawias klamrowy zamykający „}” umieścić pod akcją dodanie tego napisu „ceny widoczne po zalogowaniu”.
Alternatywnie można zamiast zmiany nawiasu wrzucić jeszcze jednego ifa:
if ( is_user_logged_in() )
{
//dodanie linku na stronie z pojedynczym produktem
remove_action( 'woocommerce_single_product_summary’, 'fanka_kodowania_my_account_link’, 31 );
}
——————–
Tutaj wkleję Twój cały kod ale ze zmienionym nawiasem:
add_action( 'init’, 'fanka_kodowania_prices_only_for_logged_user’ );
function fanka_kodowania_prices_only_for_logged_user()
{
if ( ! is_user_logged_in() )
{
//usunięcie przycisku „Dodaj do koszyka” w katalogu produktów
remove_action( 'woocommerce_after_shop_loop_item’, 'woocommerce_template_loop_add_to_cart’, 10 );
//usunięcie ceny w katalogu produktów
remove_action( 'woocommerce_after_shop_loop_item_title’, 'woocommerce_template_loop_price’, 10 );
//usunięcie przycisku „Dodaj do koszyka” na stronie z pojedynczym produktem
remove_action( 'woocommerce_single_product_summary’, 'woocommerce_template_single_add_to_cart’, 30 );
//usunięcie ceny na stronie z pojedynczym produktem
remove_action( 'woocommerce_single_product_summary’, 'woocommerce_template_single_price’, 10 );
//dodanie linku do katalogu produktów
add_action( 'woocommerce_after_shop_loop_item’, 'fanka_kodowania_my_account_link’, 11 );
//dodanie linku na stronie z pojedynczym produktem
add_action( 'woocommerce_single_product_summary’, 'fanka_kodowania_my_account_link’, 31 );
}
}
function fanka_kodowania_my_account_link() {
echo '<a href=”’ . get_permalink(wc_get_page_id(’myaccount’)) . '”>’ . __(’Ceny widoczne po zalogowaniu’, 'nazwa_motywu’) . '</a>’;
}
W załączniku dodałem zdjęcie który nawias można przenieść.
Dziękuję za wskazówki, pozdrawiam 🙂