Magento 2 hide shipping method if free

Online shoppers look forward to shipping charges and it often becomes the decision point for purchase.

Hence, E-commerce store owners need to define the shipping system strategically so that neither the customers are disappointed nor the business has to incur any loss.

In the default Magento 2, the admin can enable or disable shipping method from the backend.

However, if one wants to enable/disable shipping method programmatically in Magento 2 based on specific conditions, follow the below solution.

For instance, you want to enable the free shipping method for a minimum cart total and above. Or, you want to enable a certain shipping service for fixed regions or states only.

If the customer’s orders fulfil such condition, then only the shipping method should be enabled or disabled.

It can be done with the programmatic solution in this post. Or, you may prefer the Magento 2 Shipping Restrictions extension to restrict shipping methods based on the cart, customer attributes, zip codes, and days of the week!

Steps to Enable/Disable Shipping Method Programmatically in Magento 2

  1. Create a plugin in di.xml file and use this below code.

    <type name="Magento\Shipping\Model\Shipping"> <plugin disabled="false" name="Vendor_Extension_Model_Shipping" sortOrder="10" type="Vendor\Extension\Plugin\ApplyShipping"/> </type>

    <type name="Magento\Shipping\Model\Shipping">

        <plugin disabled="false" name="Vendor_Extension_Model_Shipping" sortOrder="10"

                type="Vendor\Extension\Plugin\ApplyShipping"/>

    </type>

  2. Create a plugin file in Vendor/Extension/Plugin.

    <?php namespace Vendor\Extension\Plugin; class ApplyShipping { public function __construct() { } public function aroundCollectCarrierRates( \Magento\Shipping\Model\Shipping $subject, \Closure $proceed, $carrierCode, $request ) { // Enter Shipping Code here instead of 'freeshipping' if ($carrierCode == 'freeshipping') { // To disable the shipping method return false return false; } // To enable the shipping method return $proceed($carrierCode, $request); } }

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    <?php

    namespace Vendor\Extension\Plugin;

    class ApplyShipping

    {

        public function __construct()

        {

        }

        public function aroundCollectCarrierRates(

            \Magento\Shipping\Model\Shipping $subject,

            \Closure $proceed,

            $carrierCode,

            $request

        )

        {

                // Enter Shipping Code here instead of 'freeshipping'

            if ($carrierCode == 'freeshipping') {

               // To disable the shipping method return false

                return false;

            }

               // To enable the shipping method

                return $proceed($carrierCode, $request);

        }

    }

    The shipping method will be disabled if free shipping is selected else enables.

    That’s it!

    Any doubts about the solution can be mentioned in the Comments section below. I’d be happy to help.

    Feel free to share the solution with Magento 2 community via social media.

    Thank You. 

Magento 2 hide shipping method if free

Shipping Restrictions

Allows restricting shipping methods based on the cart, customer attributes, zip codes, and days of the week for efficient shipping management.