Hide Flat Rate When Free Shipping Is Active In Magento 2

Posted on Posted 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.

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

Leave a Reply

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