Сделать страницы WooCommerce доступными только для зарегистрированных пользователей

12

У меня есть веб-сайт с использованием WordPress и электронная коммерция с использованием WooCommerce. Я бы хотел, чтобы мой магазин (и все его страницы) видели только зарегистрированные пользователи.

С помощью плагина User Access Manager я запретил доступ к странице магазина, но с прямой ссылкой на продукт и т. Д. Тем не менее можно получить доступ к этой конкретной странице, даже если пользователь не вошел в систему.

Как я могу перенаправить пользователей, которые не вошли в систему, на другую страницу, если они пытаются получить доступ к странице WooCommerce?

Alessandro
источник

Ответы:

24

Поместите это в свой functions.phpфайл:

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');

Что оно делает?
Мы проверяем, хочет ли пользователь, не вошедший в систему, видеть страницу WooCommerce и перенаправляет его на нашу домашнюю страницу.

tfrommen
источник
Спасибо за помощь. Файл functions.php находится в моей папке темы? И как я могу вспомнить эту функцию со страницы продукта? Спасибо :-)
Алессандро
Большое спасибо. Ваш код отлично работает для меня. Большое спасибо :)
Алессандро
1
Убедитесь, что вы не установили ни одну из страниц woocommerce в качестве домашней страницы, потому что тогда сайт больше не будет работать.
СПРБРН
7

Я только что изменил перенаправление на

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

поэтому пользователи перенаправляются на страницу «Моя учетная запись», если они не авторизованы или не зарегистрированы.

пьер
источник
2
Это не лучший способ для перенаправления на My Accountстраницу. Лучше получить постоянную ссылку на страницу «Моя учетная запись», которую вы указали в настройках WooCommerce. Таким образом, всякий раз, когда постоянная ссылка изменяется или у вас работает многоязычный сайт, постоянная ссылка все равно будет корректно получена. Короче говоря: лучше не кодировать постоянные ссылки / слагов (или URL в целом). Лучший способ был бы:wp_redirect( get_permalink( get_option( 'woocommerce_myaccount_page_id' ) ) );
Ренс Тиллманн
вы пропустили код; это конец
user889030
0

Я бы поменял на это

wp_safe_redirect( wc_get_page_permalink( 'myaccount' ) );

вместо того

wp_redirect( site_url('my-account/') );
Илиас Бенетос
источник
2
Не могли бы вы пояснить, почему это поможет другим людям узнать что-то из вашего ответа?
Krzysiek Dróżdż