Site icon MageComp Blog

How to Remove Disable Product from Cart in Magento 2

How to Remove Disable Product from Cart in Magento 2

Hello, Magento Folks,

Last time we have learned how you can Change MyAccount navigation links title dynamically in Magento 2. Today we are going to learn how you can remove disable products from the cart. So, without further talks, let’s get started.

Now the era of the e-commerce world is up and running, and developers are expanding their coding capabilities to make CMS smarter and flexible. With this view, we are coming up and developing new codes to fulfill the function that any store owner like you require.

There are times when you require to remove disabled products from the cart. These disabled products are of no use to anyone, so it is better to remove them from the cart. To achieve this, we need to create a custom extension and test module to use the below code.

Create a Test Module, in which create these files,

Create file app/code/Vendor/Extension/etc/frontend/event.xml

Use the below code,

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="customer_login">
        <observer name="custom_customer_log_login" instance="Vendor\Extension\Observer\UpdateCartAfterCustomerLoginAtObserver"/>
    </event>
</config>

Now, Create file app/code/Vendor/Extension/Observer/

Update cart after customer login at Observer.php

<?php
namespace Vendor\Extension\Observer;
use \Magento\Framework\Message\ManagerInterface ;
class UpdateCartAfterCustomerLoginAtObserver implements \Magento\Framework\Event\ObserverInterface{

    protected $_customerCartSession;
    protected $_productRepository;
    protected $_checkoutSession;
    protected $_productModel;

    public function __construct
    (
        \Magento\Checkout\Model\Cart $cart,
        \Magento\Checkout\Model\Session $checkoutSession,
        \Magento\Catalog\Model\Product $productModel
    ){
        $this->_customerCartSession = $cart;
        $this->_checkoutSession = $checkoutSession;
        $this->_productModel = $productModel;
    }
    public function execute(\Magento\Framework\Event\Observer $observer){
        $customer = $observer->getEvent()->getCustomer();
        $cartItems = $this->_checkoutSession->getQuote()->getAllItems();
        foreach ($cartItems as $item) {
            $product = $this->_productModel->load($item->getProductId());
            if(!$product->getStatus())
                $this->_customerCartSession->removeItem($item->getItemId())->save();
        }
        return true;
    }
}

So, that’s it. With little coding knowledge, you can achieve this without any hassle. If you liked this article, then let us know in the comments below. Also, you can share this with your Magento colleagues and friends.

Lastly, if you faced any problems while implementing the code, then you can get in touch with us at our support portal. We will be glad to help you.

Happy Coding!

Exit mobile version