WooCommerce и is_user_logged_in() - перенаправление неавторизованных пользователей на главную страницу
Я использую 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;
но страница все равно остается доступной для просмотра
Прежде всего, никогда не редактируйте плагины других людей или основные файлы 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

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

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

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

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

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

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

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