Форум программистов, компьютерный форум, киберфорум
WordPress
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
1 / 1 / 1
Регистрация: 16.01.2014
Сообщений: 59

Как в woocommerce отображать контент только для зарегистрированных?

27.10.2016, 02:42. Показов 5121. Ответов 7

Студворк — интернет-сервис помощи студентам
Добрый день!

Есть необходимость показа товаров только для зарегистрированных пользователей.
Использовал разные методы, но ни один их методов не подходит.

Кратко, нужно чтобы незарегистрированные пользователи зашедшие в магазин не видели товары, а вместо этого отображаась форма входа и сообщение: "Вы должны быть авторизованы для просмотра содержимого страницы'"

WooCommerce Restrict Categories Plus - Плагин просто скрывает категории товаров, но не сами товары.
Restrict Categories - вообще не отображает категори товаров и соответственно не подходит
Page Restrict - не подходит, так как нет страницы с товарами. Есть каталог по адресу /shop

Может знаете другие плагины?

Пробовал через шорткод, но тоже не подходит (просто нечего скрывать).

Единственный вариант РНР код:
PHP
1
2
3
4
5
6
7
<?php
if ( is_user_logged_in() ) {
    echo 'товары';
} else {
    echo 'Вы должны быть авторизованы для просмотра содержимого страницы';
}
?>
Код не совсем подходит, так как товары выводятся циклом (loop) и тогда он просто дублирует строчку из else для каждого товара. например 12 раз....

Страница категории товаров:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
<?php 
/**
 * The Template for displaying product archives, including the main shop page which is a post type archive.
 *
 * Override this template by copying it to yourtheme/woocommerce/archive-product.php
 *
 * @author      WooThemes
 * @package     WooCommerce/Templates
 * @version     2.0.0
 */
 
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
    get_header('shop');
?> 
<div class="container">
    <div class="row">
        <div class="span12 breadcrumbs">
            <?php
                do_action('woocommerce_before_main_content'); 
 
                extract(etheme_get_shop_sidebar());
 
            ?>          
            <a class="back-to" href="javascript: history.go(-1)"><span>&lsaquo;</span> <?php _e('Return to Previous Page', ETHEME_DOMAIN); ?></a>
         
        </div>
    </div>
</div>
<div class="container">
    <div class="row">
        <?php if($product_sidebar && $responsive == 'top') : ?>
            <div id="products-sidebar" class="span3 sidebar_grid leftnav acc_enabled sidebar_<?php echo $grid_sidebar ?>">
                <?php if ( is_active_sidebar( 'product-widget-area' ) ) : ?>
                    <?php dynamic_sidebar( 'product-widget-area' ); ?>
                <?php else: ?>
                    <?php etheme_get_wc_categories_menu() ?>
                <?php endif; ?> 
                <div class="clear"></div>
            </div>
        <?php endif; ?> 
        <div id="default_products_page_container" class="grid_content with-sidebar-<?php echo $grid_sidebar ?> <?php if(!$product_sidebar) echo 'span12 no-sidebar'; else echo 'span9 with-sidebar'?>">
        <?php
            global $wp_query;
            $cat = $wp_query->get_queried_object();
            $image = '';
            if(empty($cat->term_id) && !is_search()){
                $image = etheme_get_option('product_bage_banner');
            }else{
                $thumbnail_id = get_woocommerce_term_meta( $cat->term_id, 'thumbnail_id', true );
                $image = wp_get_attachment_url( $thumbnail_id );
            }
            
            if($image && $image !=''){
                ?> 
                    <div class="grid_slider">
                        <img class="cat-banner" src="<?php echo $image ?>" /> 
                    </div>
                <?php
            } ?>
 
            <?php if(isset($cat->description) && $cat->description !='' && !is_shop()) {
                ?>
                    <div class="product-category-description">
                        <?php echo do_shortcode($cat->description); ?>
                    </div>
                <?php
            }
            
            
         ?>
                
                <?php etheme_demo_alerts(); ?>
                
            <?php if ( have_posts() ) : ?>
    
                <div class="grid_pagination_block">
                    <?php do_action('woocommerce_before_shop_loop'); ?>
                    <div class="clear"></div>
                </div>
                
                    <?php woocommerce_product_subcategories(array('before'=>'<div class="product_categories_grid">', 'after' => '</div>')); ?>
                    
 
                    <?php $view_mode = etheme_get_option('view_mode'); ?>
                    <?php 
                        if($view_mode == 'grid' || $view_mode == 'grid_list') {
                            $view_class = 'products-grid'; 
                        }else{
                            $view_class = 'products-list'; 
                        }
                        
                    ?>
                    
                    <div id="products-grid" class="products_grid <?php echo $view_class;  ?> row rows-count<?php echo $product_per_row ?>">
                        <?php while ( have_posts() ) : the_post(); ?>
                
                            <?php woocommerce_get_template_part( 'content', 'product' ); ?>
                
                        <?php endwhile; // end of the loop. ?>
                        <div style="clear: both;"></div>
                    </div>
                    <script type="text/javascript">listSwitcher(); check_view_mod();</script>
                    
                    
                <div class="clear"></div>
        
                <div class="grid_pagination_bottom_block">
                    <?php do_action('woocommerce_after_shop_loop'); ?>
                    <div class="clear"></div>
                </div>
                
            <?php else : ?>
            
                <?php if ( ! woocommerce_product_subcategories( array( 'before' => '<ul class="products">', 'after' => '</ul>' ) ) ) : ?>
                        
                    <div class="empty-category-block">
                        
                        <?php etheme_option('empty_category_content'); ?>   
                        <p><a class="button active arrow-left" href="<?php echo get_permalink(woocommerce_get_page_id('shop')); ?>"><span><?php _e('Return To Shop', ETHEME_DOMAIN) ?></span></a></p>
                        
                    </div>
                        
                <?php endif; ?>
            
            <?php endif; ?>
            
            <?php dynamic_sidebar( 'under-product-widget-area' ); ?>
    
    
           <?php do_action('woocommerce_after_main_content'); ?>
            </div>
        <?php if($product_sidebar && $responsive == 'bottom') : ?>
            <div id="products-sidebar" class="span3 sidebar_grid leftnav acc_enabled sidebar_<?php echo $grid_sidebar ?>">
                <?php if ( is_active_sidebar( 'product-widget-area' ) ) : ?>
                    <?php dynamic_sidebar( 'product-widget-area' ); ?>
                <?php else: ?>
                    <?php etheme_get_wc_categories_menu() ?>
                <?php endif; ?> 
                <div class="clear"></div>
            </div>
        <?php endif; ?> 
        <div class="clear"></div>
    </div>
</div><!-- .container -->
<?php get_footer('shop'); ?>
Буду признателен за помощь!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.10.2016, 02:42
Ответы с готовыми решениями:

как сделать страницу только для зарегистрированных?
Такой вопрос, у меня работает регистрация и авторизация на сайте, но как сделать что бы например страница home.php была видна только для...

Как отображать контент который не влазит в ячейку?
Доброй ночи уважаемые. Столкнулся с задачей переноса существующего сайта написанного на таблицах на более новые технологии (без изменения...

Вопросы по подходу и не только. Отображение контента для зарегистрированных/незарегистрированных пользователей.
Это вопрос больше по подходу. Наверное можно было и так найти, но я подумал, что если кто-нибудь сможет ответить, то это и для многих...

7
 Аватар для rikitikitari
87 / 87 / 41
Регистрация: 09.05.2015
Сообщений: 315
27.10.2016, 05:53
И что вам мешает использовать данный код снаружи цикла?
1
1 / 1 / 1
Регистрация: 16.01.2014
Сообщений: 59
27.10.2016, 13:56  [ТС]
Добрый день!
Знать бы еще, как именно это все сделать)))
Просто если сделать это снаружи цикла.... даже вне блоков div он повторяет текст из else N-е количество раз...
0
 Аватар для rikitikitari
87 / 87 / 41
Регистрация: 09.05.2015
Сообщений: 315
27.10.2016, 14:29
Лучший ответ Сообщение было отмечено aphoenix как решение

Решение

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
///////////////// До вывода товаров
/////////////////
if ( is_user_logged_in() ) {
    <?php if ( have_posts() ) : ?>
         <div class="grid_pagination_block">
             <?php do_action('woocommerce_before_shop_loop'); ?>
             <div class="clear"></div>
          </div>
    ///////////////// Вывод товаров
    <?php endif; ?>
} else {
    echo 'Вы должны быть авторизованы для просмотра содержимого страницы';
}
///////////////// После вывода товаров
/////////////////
?>
Вот сам цикл

PHP
1
2
3
4
5
                        <?php while ( have_posts() ) : the_post(); ?>
                
                            <?php woocommerce_get_template_part( 'content', 'product' ); ?>
                
                        <?php endwhile; // end of the loop. ?>
1
1 / 1 / 1
Регистрация: 16.01.2014
Сообщений: 59
27.10.2016, 19:26  [ТС]
Благодарю)) Я попробую и обязательно отпишусь)) Еще раз спасибо)

Добавлено через 4 часа 55 минут
Я попробовал добавить код, который вы указали.
Тут 2 варианта:либо я что-то нерпавильно делаю, либо в синтаксисе есть какая-то ошибка.

Я участок кода:
PHP
1
2
3
4
5
6
<?php if ( have_posts() ) : ?>
    
                <div class="grid_pagination_block">
                    <?php do_action('woocommerce_before_shop_loop'); ?>
                    <div class="clear"></div>
                </div>
заменил на ваш:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
<?php
if ( is_user_logged_in() ) {
    <?php if ( have_posts() ) : ?>
         <div class="grid_pagination_block">
             <?php do_action('woocommerce_before_shop_loop'); ?>
             <div class="clear"></div>
          </div>
    <?php endif; ?>
} else {
    echo 'Вы должны быть авторизованы для просмотра содержимого страницы';
}
?>
Код закрытия рнр ?> неправильно подсвечивается и соответственно что-то нетак. а при открытии страницы просто белый фон...

Прошу прощения, что беспокою, но не могли бы вы уточнить детали?))
0
 Аватар для rikitikitari
87 / 87 / 41
Регистрация: 09.05.2015
Сообщений: 315
28.10.2016, 02:19
Лучший ответ Сообщение было отмечено aphoenix как решение

Решение

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<?php 
/**
 * The Template for displaying product archives, including the main shop page which is a post type archive.
 *
 * Override this template by copying it to yourtheme/woocommerce/archive-product.php
 *
 * @author      WooThemes
 * @package     WooCommerce/Templates
 * @version     2.0.0
 */
 
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
    get_header('shop');
?> 
<div class="container">
    <div class="row">
        <div class="span12 breadcrumbs">
            <?php
                do_action('woocommerce_before_main_content'); 
 
                extract(etheme_get_shop_sidebar());
 
            ?>          
            <a class="back-to" href="javascript: history.go(-1)"><span>&lsaquo;</span> <?php _e('Return to Previous Page', ETHEME_DOMAIN); ?></a>
         
        </div>
    </div>
</div>
<div class="container">
    <div class="row">
        <?php if($product_sidebar && $responsive == 'top') : ?>
            <div id="products-sidebar" class="span3 sidebar_grid leftnav acc_enabled sidebar_<?php echo $grid_sidebar ?>">
                <?php if ( is_active_sidebar( 'product-widget-area' ) ) : ?>
                    <?php dynamic_sidebar( 'product-widget-area' ); ?>
                <?php else: ?>
                    <?php etheme_get_wc_categories_menu() ?>
                <?php endif; ?> 
                <div class="clear"></div>
            </div>
        <?php endif; ?> 
        <div id="default_products_page_container" class="grid_content with-sidebar-<?php echo $grid_sidebar ?> <?php if(!$product_sidebar) echo 'span12 no-sidebar'; else echo 'span9 with-sidebar'?>">
        <?php
            global $wp_query;
            $cat = $wp_query->get_queried_object();
            $image = '';
            if(empty($cat->term_id) && !is_search()){
                $image = etheme_get_option('product_bage_banner');
            }else{
                $thumbnail_id = get_woocommerce_term_meta( $cat->term_id, 'thumbnail_id', true );
                $image = wp_get_attachment_url( $thumbnail_id );
            }
            
            if($image && $image !=''){
                ?> 
                    <div class="grid_slider">
                        <img class="cat-banner" src="<?php echo $image ?>" /> 
                    </div>
                <?php
            } ?>
 
            <?php if(isset($cat->description) && $cat->description !='' && !is_shop()) {
                ?>
                    <div class="product-category-description">
                        <?php echo do_shortcode($cat->description); ?>
                    </div>
                <?php
            }
            
            
         ?>
                
                <?php etheme_demo_alerts();
                if ( is_user_logged_in() ) {
                    if ( have_posts() ) : ?>
    
                    <div class="grid_pagination_block">
                        <?php do_action('woocommerce_before_shop_loop'); ?>
                        <div class="clear"></div>
                    </div>
                    
                        <?php woocommerce_product_subcategories(array('before'=>'<div class="product_categories_grid">', 'after' => '</div>')); ?>
                        
     
                        <?php $view_mode = etheme_get_option('view_mode'); ?>
                        <?php 
                            if($view_mode == 'grid' || $view_mode == 'grid_list') {
                                $view_class = 'products-grid'; 
                            }else{
                                $view_class = 'products-list'; 
                            }
                            
                        ?>
                        
                        <div id="products-grid" class="products_grid <?php echo $view_class;  ?> row rows-count<?php echo $product_per_row ?>">
                            <?php while ( have_posts() ) : the_post(); ?>
                    
                                <?php woocommerce_get_template_part( 'content', 'product' ); ?>
                    
                            <?php endwhile; // end of the loop. ?>
                            <div style="clear: both;"></div>
                        </div>
                        <script type="text/javascript">listSwitcher(); check_view_mod();</script>
                        
                        
                    <div class="clear"></div>
            
                    <div class="grid_pagination_bottom_block">
                        <?php do_action('woocommerce_after_shop_loop'); ?>
                        <div class="clear"></div>
                    </div>
                    
                <?php else : ?>
                
                    <?php if ( ! woocommerce_product_subcategories( array( 'before' => '<ul class="products">', 'after' => '</ul>' ) ) ) : ?>
                            
                        <div class="empty-category-block">
                            
                            <?php etheme_option('empty_category_content'); ?>   
                            <p><a class="button active arrow-left" href="<?php echo get_permalink(woocommerce_get_page_id('shop')); ?>"><span><?php _e('Return To Shop', ETHEME_DOMAIN) ?></span></a></p>
                            
                        </div>
                            
                    <?php endif; ?>
                
                <?php endif;
            } else {
                echo 'Вы должны быть авторизованы для просмотра содержимого страницы';
            }
            ?>
            
            <?php dynamic_sidebar( 'under-product-widget-area' ); ?>
    
    
           <?php do_action('woocommerce_after_main_content'); ?>
            </div>
        <?php if($product_sidebar && $responsive == 'bottom') : ?>
            <div id="products-sidebar" class="span3 sidebar_grid leftnav acc_enabled sidebar_<?php echo $grid_sidebar ?>">
                <?php if ( is_active_sidebar( 'product-widget-area' ) ) : ?>
                    <?php dynamic_sidebar( 'product-widget-area' ); ?>
                <?php else: ?>
                    <?php etheme_get_wc_categories_menu() ?>
                <?php endif; ?> 
                <div class="clear"></div>
            </div>
        <?php endif; ?> 
        <div class="clear"></div>
    </div>
</div><!-- .container -->
<?php get_footer('shop'); ?>
0
1 / 1 / 1
Регистрация: 16.01.2014
Сообщений: 59
28.10.2016, 03:10  [ТС]
Решил проблемы более простым способом)))
Нашел на американском форуме решение методом добавления кода в functions.php

PHP
1
2
3
4
5
6
7
8
9
10
<?php
//Dont copy the above opening php tag
//Hide WooCommerce from non-logged in users
function woocommerce_hide_non_registered() {        
    if( ( is_shop() || is_product() || is_product_category() )  && ! is_user_logged_in() ) {
        wp_redirect( site_url( '/' ) );
        exit();
    }   
}
add_action( 'template_redirect','woocommerce_hide_non_registered' );
site_url( '/' Страница перенаправления. Например, форма регистрации или форма входа
Вдруг, кому понадобится.
0
0 / 0 / 0
Регистрация: 28.01.2017
Сообщений: 1
28.01.2017, 02:17
Способ, предложенный, rikitikitari закрыл главную страницу магазина и страницы категорий, а вот ссылки единичных товаров открывались замечательно и для незарегистрированных пользователей.
Огромное спасибо aphoenix за более простое решение вопроса!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.01.2017, 02:17
Помогаю со студенческими работами здесь

Отобразить контент только для одной страны
Доброе время суток! Надо сделать так, чтобы мой сайт отображался только в определенной стране (Украине) и чтобы не открывался через...

Трещит hdd, не запускается ноутбук, контент только для взрослых
Здравствуйте, уважаемые форумчане! Вчера случилась беда с моим любящим ноутбуком. Надеюсь на вашу помощь, товарищи. И так, вчера, после,...

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

Как заставить openFileDialog отображать только файлы, без папок?
То есть, нужно, чтобы были видны только файлы.

Как вывести на странице только подкатегории определённой категории (WP+woocommerce)
Здравствуйте дорогие форумчане! Я тока начал изучать woocommerce и не могу найти решение проблемы: нужно на странице(не в категории, а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru