WooCommerce и is_user_logged_in() - перенаправление неавторизованных пользователей на главную страницу

27 сент. 2012 г., 06:20:32
Просмотры: 19.5K
Голосов: 2

Я использую WooCommerce и хочу перенаправлять неавторизованных пользователей на главную страницу, но у меня возникли трудности с определением места для реализации этой функции.

В ходе исследований я выяснил, что можно использовать функцию is_user_logged_in() для проверки авторизации пользователя.

Я попытался реализовать это в файле woocommerce/woocommerce-functions.php

// При включенных стандартных постоянных ссылках перенаправляем страницу магазина на архив товаров
    if (is_user_logged_in() && isset($_GET['page_id']) && $_GET['page_id'] > 0 && get_option( 'permalink_structure' )=="" && $_GET['page_id'] ==     woocommerce_get_page_id('shop') ) :
        wp_safe_redirect( get_post_type_archive_link('product') );
        exit;
    endif;

но страница все равно остается доступной для просмотра

0
Все ответы на вопрос 3
1

Прежде всего, никогда не редактируйте плагины других людей или основные файлы WordPress.

Также используйте фигурные скобки вместо "красивого" форматирования, так как такое форматирование ломает подсветку кода в IDE, сопоставление скобок, синтаксические проверки и другие полезные инструменты.

Вставьте этот код:

// При включенных стандартных постоянных ссылках перенаправляем страницу магазина на URL архива типа записи
if (is_user_logged_in() && isset($_GET['page_id']) && $_GET['page_id'] > 0 && get_option( 'permalink_structure' )=="" && $_GET['page_id'] ==     woocommerce_get_page_id('shop') ) {
    wp_redirect( get_post_type_archive_link('product') );
    die();
}

Либо в:

  • начало файла functions.php
  • отдельный плагин
  • хук Init
27 сент. 2012 г. 15:59:44
Комментарии

спасибо за рекомендацию, я попробую добавить это в functions.php

bugz bugz
27 сент. 2012 г. 17:03:03
8

Вам нужно будет вставить свой код в верхней части шаблонов страниц WooCommerce, которые должны быть затронуты редиректом, а не в файл functions.php. Например, если вы хотите перенаправлять пользователей при попытке доступа к странице отдельного товара, вы можете разместить код в верхней части файла plugins->woocommerce->templates->single-product.php.

Однако при редактировании шаблонов я рекомендую сделать их копию и поместить в директорию вашей темы, чтобы при обновлении WooCommerce ваши изменения не были перезаписаны. Например, для приведенного выше случая (применительно к моей теме) я бы скопировал single-product.php и поместил его в папку themes->agency, а затем внес изменения уже в этот файл. Ваша тема всегда будет использовать этот файл вместо того, который находится в шаблонах WooCommerce.

27 сент. 2012 г. 15:29:13
Комментарии

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

bugz bugz
27 сент. 2012 г. 17:00:16

Поскольку страница магазина по сути является циклом, вы можете добавить хук в файл functions.php. Скопируйте это и дайте мне знать, сработает ли. http://pastie.org/4830106. У меня на странице магазина есть некоторые странности (я фактически её удалил), поэтому сам не могу проверить. Если не сработает — я исправлю.

Kyle Kyle
27 сент. 2012 г. 18:19:02

хм, после добавления этого в файл functions.php моей темы весь сайт перестал работать. я должен был добавить это в functions файл woocommerce?

bugz bugz
27 сент. 2012 г. 21:10:49

Извините, я допустил ленивую синтаксическую ошибку, удалите это и попробуйте вот это http://pastie.org/4830960

Kyle Kyle
27 сент. 2012 г. 21:17:03

Хорошо, я протестировал этот код, и он точно работает: http://pastie.org/4831059. Вставьте это в файл functions.php

Kyle Kyle
27 сент. 2012 г. 21:36:55

bugz - Это сработало?

Kyle Kyle
28 сент. 2012 г. 00:22:13

Если это сработало, не могли бы вы проверить этот ответ...

Kyle Kyle
28 сент. 2012 г. 18:11:27

Я не согласен с вставкой этого кода в верхнюю часть шаблонов страниц для Woo. Следует использовать template_redirect хук действия.

cybmeta cybmeta
8 авг. 2015 г. 17:15:55
Показать остальные 3 комментариев
1

Используйте код в файле functions.php:

add_filter('woocommerce_login_redirect', 'wc_login_redirect');

function wc_login_redirect( $redirect_to ) {
     $redirect_to = 'https://www.example.com/';
     return $redirect_to;
}
27 июл. 2015 г. 11:57:53
Комментарии

Пожалуйста, [отредактируйте] ваш ответ и добавьте пояснение. Выкладывание фрагмента кода без объяснения — это плохой ответ.

Mayeenul Islam Mayeenul Islam
27 июл. 2015 г. 12:53:03