1

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? – NIPPU Nov 19 '18 at 12:41
  • Non stocking group menas => Not logged in users? – NIPPU Nov 19 '18 at 12:43
  • We have created in new customer group name called non stocking. – Rv Singh Nov 19 '18 at 12:44
  • have you tried with cart price rules ? prnt.sc/lk7xu9 – NIPPU Nov 19 '18 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 Nov 19 '18 at 12:52
1
  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" />  

        </type>      
 </config>
  1. Create model file app/code/Hello/World/Model/Carrier/Freeshipping.php

    <?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();
        $logger->addWriter($writer);
        //Customer Group ID Here
        $customerGroupId=$this->_customerSession->getCustomer()->getGroupId();     
        $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 Nov 19 '18 at 14:01
  • Please try this code in local instance first and test the scenarios and then confirm the same – NIPPU Nov 19 '18 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 Nov 19 '18 at 14:05
  • Yes @Saniya i have updated now please consider updated answer now – NIPPU Nov 19 '18 at 14:06
  • @Saniya let me know whether this solution is working fine as you expected? – NIPPU Nov 20 '18 at 6:54
0

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

https://webkul.com/blog/create-custom-shipping-method-in-magento2/

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, privacy policy and cookie policy

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