In magento2 checkout page i'm using free shipping method and i need to hide free shipping method only for non stocking customer group and rest of all customer group i want to display free shipping method.So anyone please guide me in which file i have to put condition.Please check attached image.enter image description here

  • can you please clarify non stocking customer group means? Commented Nov 19, 2018 at 12:41
  • Non stocking group menas => Not logged in users? Commented Nov 19, 2018 at 12:43
  • We have created in new customer group name called non stocking.
    – Rv Singh
    Commented Nov 19, 2018 at 12:44
  • have you tried with cart price rules ? prnt.sc/lk7xu9 Commented Nov 19, 2018 at 12:48
  • Actually i don't want to apply free shipping i want to hide free shipping option in checkout page for particular customer groups
    – Rv Singh
    Commented Nov 19, 2018 at 12:52

2 Answers 2

  1. Create custom module Hello_World
  2. Create plugin and configure in di.xml file, app/code/Hello/World/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\Freeshipping">
          <plugin name="disable-freeshipping" type="Hello\World\Model\Carrier\Freeshipping" sortOrder="1" />  

  1. Create model file app/code/Hello/World/Model/Carrier/Freeshipping.php

    namespace Hello\World\Model\Carrier;    
    class Freeshipping{
    protected $_checkoutSession;        
    protected $_scopeConfig;
    protected $_customerSession;
    public function __construct(
        \Magento\Checkout\Model\Session $checkoutSession,
        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
        \Magento\Store\Model\StoreManagerInterface $storeManager,
        \Magento\Customer\Model\Session $customerSession
    ) {
        $this->_storeManager = $storeManager;
        $this->_checkoutSession = $checkoutSession;
        $this->_scopeConfig = $scopeConfig;
        $this->_customerSession = $customerSession;
    public function afterCollectRates(\Magento\OfflineShipping\Model\Carrier\Freeshipping $freeshipping, $result)
        //Magento-2 Log Here
        $writer = new \Zend\Log\Writer\Stream(BP.'/var/log/magento2.log');
        $logger = new \Zend\Log\Logger();
        //Customer Group ID Here
        $logger->info("Free shipping has been calling and customerGroupId ".$customerGroupId);              
        //keep your customer group id here
        if($customerGroupId === '1'){
            return false;       
        return $result;
  • 1
    Thanks In third steps what is file name so we can override it
    – Rv Singh
    Commented Nov 19, 2018 at 14:01
  • Please try this code in local instance first and test the scenarios and then confirm the same Commented Nov 19, 2018 at 14:04
  • but I think there are some naming issue in your above code "Create model file app/code/Hello/World/di.xml"
    – Rv Singh
    Commented Nov 19, 2018 at 14:05
  • Yes @Saniya i have updated now please consider updated answer now Commented Nov 19, 2018 at 14:06
  • @Saniya let me know whether this solution is working fine as you expected? Commented Nov 20, 2018 at 6:54

For this, you need to create a custom shipping method. The below link will helps you to create custom shipping method


You can set the condition in the function collectRates in the file app/code/Webkul/Customshipping/Model/Carrier.php

Refer the below link to get customer group

How to get current customer group id in magento2


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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