cancel
Showing results for 
Search instead for 
Did you mean: 

Hide products items for guests / non registered users

Hide products items for guests / non registered users

Hi,

 

Is there a way to hide products to guests/non registered users in Magento 2?

 

I want to hide not only the price but also the products published. Is thats isn't possible, i would like to hide the price (i see some paid extensions, but is there another way?)

 

Thanks in advance.

 

2 REPLIES

Re: Hide products items for guests / non registered users

First create one product level attribute to show/hide products for Guest User then create a front-end observer "catalog_product_collection_load_after"

 

<event name="catalog_product_collection_load_after">
<observer name="company_module_product_collection_load_after" instance="Company\Module\Observer\LoadProductsObserver"/>
</event>

In Observer update collection :

public function execute(\Magento\Framework\Event\Observer $observer)
    {
$collection = $observer->getEvent()->getCollection();
            foreach($collection as $data){
                if($this->canShow($data->getEntityId())){
                    // remove product from the collection
                    $collection->removeItemByKey($data->getEntityId());
                }
            }
            return $collection;
}

public function canShow($productId){
        $product = $this->_productRepository->getById($productId);
           if($product->getCanShow()){
            // Hide this product
            return TRUE;
        }
        else{
            return FALSE;
        }
    }

 

 

Re: Hide products items for guests / non registered users


@Devendra1991 wrote:

First create one product level attribute to show/hide products for Guest User then create a front-end observer "catalog_product_collection_load_after"

 

<event name="catalog_product_collection_load_after">
<observer name="company_module_product_collection_load_after" instance="Company\Module\Observer\LoadProductsObserver"/>
</event>

In Observer update collection :

public function execute(\Magento\Framework\Event\Observer $observer)
    {
$collection = $observer->getEvent()->getCollection();
            foreach($collection as $data){
                if($this->canShow($data->getEntityId())){
                    // remove product from the collection
                    $collection->removeItemByKey($data->getEntityId());
                }
            }
            return $collection;
}

public function canShow($productId){
        $product = $this->_productRepository->getById($productId);
           if($product->getCanShow()){
            // Hide this product
            return TRUE;
        }
        else{
            return FALSE;
        }
    }

 

 


Toolbar isnt updating if we do it.

 

any solution it should update filter on right and toolbar too