cancel
Showing results for 
Search instead for 
Did you mean: 

Hide products items for guests / non registered users

   Did you know you can see the translated content as per your choice?

Translation is in progress. Please check again after few minutes.

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 2

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