Magento 2

Hide Flat Rate When Free Shipping Is Active In Magento 2

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.


<?xml version=”1.0″?>
<config xmlns:xsi=”” 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″ />



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

Leave a Reply

Your email address will not be published. Required fields are marked *