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

Просмотр 8 сообщений - с 1 по 8 (из 8 всего)
  • Автор
    Сообщения
  • #15222 Ответ

    xaker
    Участник

    Добрый день!

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

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

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

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

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

    Единственный вариант РНР код:

    
    <?php
    if ( is_user_logged_in() ) {
        echo 'товары';
    } else {
        echo 'Вы должны быть авторизованы для просмотра содержимого страницы';
    }
    ?>
    

    Код не совсем подходит, так как товары выводятся циклом (loop) и тогда он просто дублирует строчку из else для каждого товара. например 12 раз….

    Страница категории товаров:

    
    <?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<b></b>: 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'); ?>
    

    Буду признателен за помощь!

    #15223 Ответ

    Tuloshba
    Участник

    И что вам мешает использовать данный код снаружи цикла?

    #15224 Ответ

    xaker
    Участник

    Добрый день!
    Знать бы еще, как именно это все сделать)))
    Просто если сделать это снаружи цикла…. даже вне блоков div он повторяет текст из else N-е количество раз…

    #15225 Ответ

    Tuloshba
    Участник

    Сообщение было отмечено автором темы, экспертом или модератором как ответ

    
    <?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 while ( have_posts() ) : the_post(); ?>
                    
                                <?php woocommerce_get_template_part( 'content', 'product' ); ?>
                    
                            <?php endwhile; // end of the loop. ?>
    
    #15226 Ответ

    xaker
    Участник

    Благодарю)) Я попробую и обязательно отпишусь)) Еще раз спасибо)

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

    Я участок кода:

    
    <?php if ( have_posts() ) : ?>
        
                    <div class="grid_pagination_block">
                        <?php do_action('woocommerce_before_shop_loop'); ?>
                        <div class="clear"></div>
                    </div>
    

    заменил на ваш:

    
    <?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 'Вы должны быть авторизованы для просмотра содержимого страницы';
    }
    ?>
    

    Код закрытия рнр ?> неправильно подсвечивается и соответственно что-то нетак. а при открытии страницы просто белый фон…

    Прошу прощения, что беспокою, но не могли бы вы уточнить детали?))

    #15227 Ответ

    Tuloshba
    Участник

    Сообщение было отмечено автором темы, экспертом или модератором как ответ

    
    <?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'); ?>
    
    #15228 Ответ

    xaker
    Участник

    Решил проблемы более простым способом)))
    Нашел на американском форуме решение методом добавления кода в functions.php

    
    <?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( ‘/’ Страница перенаправления. Например, форма регистрации или форма входа
    Вдруг, кому понадобится.

    #15229 Ответ

    cookie
    Участник

    Способ, предложенный, Tuloshba закрыл главную страницу магазина и страницы категорий, а вот ссылки единичных товаров открывались замечательно и для незарегистрированных пользователей.
    Огромное спасибо xaker за более простое решение вопроса!!!

Просмотр 8 сообщений - с 1 по 8 (из 8 всего)
Ответить в теме: Как в woocommerce отображать контент только для зарегистрированных?
Ваша информация: