0

How to hide add to cart button for particular products on all page in magento 2

To hide add to cart button all page using a below plugin:

di.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="/lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
    <type name="Magento\Catalog\Model\Product">
        <plugin name="hidebutton" type="Vendor\Module\Plugin\HideButton" sortOrder="10" disabled="false"  />
    </type>
</config>

HideButton.php

 <?php

    namespace Vendor\Module\Plugin;
    use Magento\Catalog\Model\Product;

    class HideButton
    {
        public function afterIsSaleable(
        \Magento\Catalog\Model\Product $subject,
        $result
    ) {
       if($subject->getId() == 36)
       {
         return false;
       }
       else
       {
        return  true;
       }

    }
    }

Above plugin works well but its shows an "Out of Stock" instead of "Add to cart" in listing and home page how to hide a "out of stock" text.

enter image description here

9
  • You can add attribute and manage yes or no and manage it on that product page. okay Feb 19 '20 at 6:48
  • i tried that way already as you said above. its only hide in product details and listing page but i need to hide in all page like home page, wishlish page , compare list page etc Feb 19 '20 at 6:57
  • you need to put that in all pages. Feb 19 '20 at 6:58
  • have you using any theme? Feb 19 '20 at 6:59
  • here is you focusing Out of stock button. and you mentioned other buttons in questions. Feb 19 '20 at 6:59
2

Try to use afterIsSalable() plugin using this below way :

app/code/Vendor/Module/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 name="hidebutton" type="Vendor\Module\Plugin\Product" sortOrder="1" />
    </type>

</config>

app/code/Vendor/Module/Plugin/Product.php

<?php
namespace Vendor\Module\Plugin;

class Product
{               
    public function afterIsSaleable(\Magento\Catalog\Model\Product $product)
    {
        if(your_condition_check)
        {
            return true; // For display button
        }else {
            return false; // For hide button
        }
    }
}

Clean cache and check it.

7
  • S, its work well its hide a add to cart button in all page but its show a "Out of stock" instead of "Add to cart" button, now my question is how to hide a out of stock text Feb 19 '20 at 7:20
  • 1
    You used wrong after plugin function. Please check my function name. Feb 19 '20 at 7:24
  • Thank you so much for a intimate a bug. now its works fine. Feb 19 '20 at 7:30
  • Happy to help !! Happy Coding (y) Feb 19 '20 at 7:31
  • @RohanHapani Works great. However, is it possible to return anything else ("Please login") or something like this when button is hidden?
    – zlep
    Mar 29 '21 at 9:40
0

This is can be done by Override addtocart.phtml

https://magenticians.com/magento-2-disable-add-to-cart-button/

I hope this link is what you are looking for

6
  • Thank you for your suggestion but i don't want to override a templates i need to done by without overriding a template Feb 19 '20 at 6:52
  • i used a plugin as you post above. but its show "Out of stock" instead of "Add to Cart" button. i need to show only blank space not a add to cart button or out of stock text Feb 19 '20 at 7:11
  • you can disable it by going into Stores->Configure->From Catalog drop-down select 'Inventory'->uncheck and choose no for Display Out Of Stock Products'
    – Mr Zid
    Feb 19 '20 at 7:13
  • its already default set as no only refer it prnt.sc/r4fkkr Feb 19 '20 at 7:16
  • Try this also . Go to admin > Stores > configuration > Catalog > Inventory > Product Stock Options Set Backorders to "No Backorders"
    – Mr Zid
    Feb 19 '20 at 7:20

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.