Зробіть сторінки WooCommerce доступними лише для користувачів, які увійшли


12

У мене є веб-сайт за допомогою WordPress та електронна комерція за допомогою WooCommerce. Я хотів би, щоб мій магазин (і всі його сторінки) бачили лише авторизовані користувачі.

Через плагін User Access Manager я заборонив доступ до сторінки магазину, але за допомогою прямого посилання на продукт тощо можна отримати доступ до певної сторінки, навіть якщо користувач не ввійшов у систему.

Як я можу перенаправити користувачів, які не ввійшли в систему, на іншу сторінку, якщо вони намагаються отримати доступ до сторінки WooCommerce?

Відповіді:


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 і перенаправляємо його на нашу домашню сторінку.


Дякую за твою допомогу. Файл function.php знаходиться в моїй папці тем ?? І як я можу згадати цю функцію зі сторінки продукту? Спасибі :-)
Алессандро

Дуже дякую. Ваш код для мене добре працює. Велике спасибі :)
Алессандро

1
Переконайтеся, що ви не встановите жодну із сторінок веб-комерції як свою домашню сторінку, оскільки тоді сайт більше не працюватиме.
SPRBRN

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ż
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.