Lets hide Flat Rate when free shipping method is active in magento 2.
Assuming you know how to create a module in magento 2 we will just show you how to hide flat rate using plugin.
app/code/Vendor/Cart/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\OfflineShipping\Model\Carrier\Flatrate”>
<plugin name=”disable-flatrate” type=”Vendor\Cart\Model\Carrier\Flatrate” sortOrder=”1″ />
</type>
</config>
app/code/Vendor/Cart/Model/Carrier/Flatrate.php
<?php
namespace DigitalAptech\Cart\Model\Carrier;
class Flatrate
{
const XML_PATH_FREE_SHIPPING_SUBTOTAL = “carriers/freeshipping/free_shipping_subtotal”;
/**
* @var \Magento\Checkout\Model\Session
*/
protected $_checkoutSession;
/**
* @var \Magento\Framework\App\Config\ScopeConfigInterface
*/
protected $_scopeConfig;
public function __construct(
\Magento\Checkout\Model\Session $checkoutSession,
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
\Magento\Store\Model\StoreManagerInterface $storeManager
) {
$this->_storeManager = $storeManager;
$this->_checkoutSession = $checkoutSession;
$this->_scopeConfig = $scopeConfig;
}
public function afterCollectRates(\Magento\OfflineShipping\Model\Carrier\Flatrate $flatRate, $result)
{
$scopeId = $this->_storeManager->getStore()->getId();
$storeScope = \Magento\Store\Model\ScopeInterface::SCOPE_STORES;
// Get MOA value from system configuration.
$freeShippingSubTotal = $this->_scopeConfig->getValue(self::XML_PATH_FREE_SHIPPING_SUBTOTAL, $storeScope, $scopeId);
// Get cart subtotal from checkout session.
$baseSubTotal = $this->_checkoutSession->getQuote()->getBaseSubtotal();
// Validate subtoal should be empty or Zero.
if(!empty($baseSubTotal) && !empty($freeShippingSubTotal)) {
if($baseSubTotal >= $freeShippingSubTotal) {
return false;
}
}
return $result;
}
}
And there you have it. Flat Rate wont show to the customers when Free Shipping is active
1,693 total views