Udostępnij strony WooCommerce tylko dla zalogowanych użytkowników

12

Mam stronę internetową korzystającą z WordPress i e-commerce za pomocą WooCommerce. Chciałbym, aby mój sklep (i wszystkie jego strony) był widoczny tylko dla zalogowanych użytkowników.

Za pomocą wtyczki User Access Manager odmówiłem dostępu do strony sklepu, ale dzięki bezpośredniemu linkowi do produktu itp. Można uzyskać dostęp do tej konkretnej strony, nawet jeśli użytkownik nie jest zalogowany.

Jak mogę przekierować użytkowników, którzy nie są zalogowani, na inną stronę, jeśli próbują uzyskać dostęp do strony WooCommerce?

Alessandro
źródło

Odpowiedzi:

24

Umieść to w swoim functions.phppliku:

function wpse_131562_redirect() {
    if (
        ! is_user_logged_in()
        && (is_woocommerce() || is_cart() || is_checkout())
    ) {
        // feel free to customize the following line to suit your needs
        wp_redirect(home_url());
        exit;
    }
}
add_action('template_redirect', 'wpse_131562_redirect');

Co to robi?
Sprawdzamy, czy niezalogowany użytkownik chce zobaczyć stronę WooCommerce i przekierowujemy go na naszą stronę główną.

tfrommen
źródło
Dziękuję za pomoc Plik funkcji.php znajduje się w folderze motywów? Jak mogę przywołać tę funkcję ze strony produktu? Dzięki :-)
Alessandro,
Dziękuję Ci bardzo. Twój kod działa dla mnie dobrze. Wielkie dzięki :)
Alessandro,
1
Upewnij się, że nie ustawiłeś żadnej ze stron woocommerce jako strony głównej, ponieważ wtedy strona nie będzie już działać.
SPRBRN
7

Właśnie zmieniłem przekierowanie na

wp_redirect( site_url('my-account/') )

więc użytkownicy są przekierowywani na stronę „Moje konto”, jeśli nie są zalogowani lub zarejestrowani.

Pierre
źródło
2
To nie jest najlepsza metoda przekierowania na My Accountstronę. Lepiej jest pobrać bezpośredni link do strony Moje konto, który podłączyłeś w ustawieniach WooCommerce. W ten sposób za każdym razem, gdy permalink zostanie zmieniony lub jeśli witryna z wieloma językami jest uruchomiona, permalink będzie nadal poprawnie pobierany. W skrócie: Lepiej nie kodować na stałe linków / ślimaków (lub ogólnie adresów URL). Lepszą metodą byłoby:wp_redirect( get_permalink( get_option( 'woocommerce_myaccount_page_id' ) ) );
Rens Tillmann
brakuje ci kodu; koniec
użytkownik889030
0

Zmieniłbym się na to

wp_safe_redirect( wc_get_page_permalink( 'myaccount' ) );

zamiast

wp_redirect( site_url('my-account/') );
Ilias Benetos
źródło
2
Czy możesz wyjaśnić, dlaczego to pomoże, aby inni ludzie mogli dowiedzieć się czegoś na podstawie Twojej odpowiedzi?
Krzysiek Dróżdż