How to Enable/Disable Shipping Method Programmatically in Magento 2
Featured In - Magento 2,
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
- Create a plugin in di.xml file and use this below code.1234<type name="Magento\Shipping\Model\Shipping"><plugin disabled="false" name="Vendor_Extension_Model_Shipping" sortOrder="10"type="Vendor\Extension\Plugin\ApplyShipping"/></type>
- Create a plugin file in Vendor/Extension/Plugin.The shipping method will be disabled if free shipping is selected else enables.12345678910111213141516171819202122232425262728<?phpnamespace 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 falsereturn false;}// To enable the shipping methodreturn $proceed($carrierCode, $request);}}
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.

Shipping Restrictions
Allows restricting shipping methods based on the cart, customer attributes, zip codes, and days of the week for efficient shipping management.
2 Comments
Greetings,
My problem is very similar to the one you describe.
I want to disable free shipping method in the Admin Panel> Stores> Configuration> Sales> Shipping Methods> Free Shipping> Enable> No.
When I change the ‘Enable’ box to No and save it nothing changes.
In fact any change in the Free Shipping section is not saved. I checked ‘Scope’ is set to ‘Main Website’ (only website).
How do I debug this? Any assistance will be a big help!
Thank you!
Bob Sorenson
Hello Robert,
Regarding your query, there might be some issue of caching.
Thank You