I want to create a module, which hides the Add to Cart button for all products in the category "archived" - catalog view and product view. It also can be an attribute instead of category.
With the help of www I created the following files.
app/code/eyetec/hideadd2cart/registration.php
<?php use Magento\Framework\Component\ComponentRegistrar; ComponentRegistrar::register( ComponentRegistrar::MODULE, '2EyeTec_HideAdd2Cart', __DIR__ );
app/code/eyetec/hideadd2cart/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="2EyeTec_HideAdd2Cart" schema_version="0.0.1" setup_version="0.0.1"></module> </config>
I got the module enabled and can see it in the app/etc/config.php - so I guess these two files are correct!
This is the php file - unfortunately it's not working. Can somebody explain to me, why?
I know that the condition is referring the product id (thought its easier), how can I use the category in the condition?
app/code/eyetec/hideadd2cart/Plugin/HideButton.php
<?php namespace eyetec\hideadd2cart\Plugin; use Magento\Catalog\Model\Product; class HideButton { public function afterIsSaleable(Product $product) { if($product->getId() == 1) { return true; // For display button } else { return false; // For hide button } } }
I'm using Magento 2.4.4
@quickpayportal wrote:I want to create a module, which hides the Add to Cart button for all products in the category "archived" - catalog view and product view. It also can be an attribute instead of category.
With the help of www I created the following files.
app/code/eyetec/hideadd2cart/registration.php
<?php use Magento\Framework\Component\ComponentRegistrar; ComponentRegistrar::register( ComponentRegistrar::MODULE, '2EyeTec_HideAdd2Cart', __DIR__ );
app/code/eyetec/hideadd2cart/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="2EyeTec_HideAdd2Cart" schema_version="0.0.1" setup_version="0.0.1"></module> </config>I got the module enabled and can see it in the app/etc/config.php - so I guess these two files are correct!
This is the php file - unfortunately it's not working. Can somebody explain to me, why?
I know that the condition is referring the product id (thought its easier), how can I use the category in the condition?
app/code/eyetec/hideadd2cart/Plugin/HideButton.php
<?php namespace eyetec\hideadd2cart\Plugin; use Magento\Catalog\Model\Product; class HideButton { public function afterIsSaleable(Product $product) { if($product->getId() == 1) { return true; // For display button } else { return false; // For hide button } } }I'm using Magento 2.4.4
Make sure your attribute is available on product listing page by setting "Used in Product Listing" to "Yes" when editing your attribute.
Hey, @christian_meyer,
I have seen your problem. you can hide Add to cart for a specific category. Please refer to this blog: https://magecomp.com/blog/hide-add-to-cart-button-in-magento-2/
This blog definitely help you, else you can use the Hide price extension. This also helps you to hide the Add-to-cart button.
Hope this helps you.
Thank you.
Hi @christian_meyer,
To hide the "Add to Cart" button for products in a specific category using an afterIsSalable plugin, you need to check if the product belongs to the specified category. Here’s how you can achieve this:
Step-by-Step Implementation
<?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>
In your Plugin/Product.php file, add the logic to check if the product belongs to a specific category.
<?php namespace Vendor\Module\Plugin; use Magento\Catalog\Model\Product as ProductModel; use Magento\Catalog\Api\CategoryRepositoryInterface; class Product { protected $categoryRepository; public function __construct(CategoryRepositoryInterface $categoryRepository) { $this->categoryRepository = $categoryRepository; } public function afterIsSaleable(ProductModel $product, $result) { // Array of category IDs for which to hide the "Add to Cart" button $categoriesToHide = [/* Category IDs */]; // Get product categories $categoryIds = $product->getCategoryIds(); // Check if product belongs to any of the specified categories foreach ($categoryIds as $categoryId) { if (in_array($categoryId, $categoriesToHide)) { return false; // Hide "Add to Cart" button } } return $result; // Use the original result if the product is not in the specified categories } }
If the issue will be resolved, Click Kudos & Accept as a Solution.