Sometimes few companies just want to showcase their products for a certain time. They may have a plan to lunch add to cart option later or lunch later with some others fixing. In those cases, it needs to disable the cart system for the whole store.
Now I am going to show you how can we disable the cart system using a small module.
Basically, you need to return false in isSalable method in the Magento\Catalog\Model\Product class. So, you can write an after plugin method for this isSalable method. Plugin (Interceptor) is a way to overwrite core functionalities in Magento 2. Please follow these steps below to create a small module.
app/code/MilanDev/DisableCart/registration.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'MilanDev_DisableCart',
__DIR__
);
app/code/MilanDev/DisableCart/etc/module.xml
<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="MilanDev_DisableCart" setup_version="1.0.0">
<sequence>
<module name="Magento_Catalog"/>
</sequence>
</module>
</config>
This is the file where you need to inject your class and tell that your method will be run after isSalable method.
app/code/MilanDev/DisableCart/etc/di.xml
<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Catalog\Model\Product">
<plugin disabled="false" name="MilanDev_DisableCart_Plugin_Magento_Catalog_Model_Product" sortOrder="10" type="MilanDev\DisableCart\Plugin\Magento\Catalog\Model\Product"/>
</type>
</config>
Notice the afterIsSalable method. In order to run this method immediately after isSalable method, we must add an after prefix in our newly created method (afterIsSalable).
app/code/MilanDev/DisableCart/Plugin/Magento/Catalog/Model/Product.php
<?php
namespace MilanDev\DisableCart\Plugin\Magento\Catalog\Model;
class Product
{
public function afterIsSalable(
\Magento\Catalog\Model\Product $subject,
$result
) {
return false;
}
}
Run the following commands in your Magento root directory.
php bin/magento module:enable MilanDev_DisableCart -c
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento cache:flush
If you have a preferred method in this topic. Please let me know in the comments. Happy Coding!