1

I'd like to offer my customers free shipping when the cart is over $65 but only in 1 specific shipping method.

I have 4 shipping methods but only one should be free.

Does anyone know how to do it?

Thanks in advance

EDIT: I'm using Community Edition 1.9.0.1

3
  • may be this link help you lexiconn.com/blog/2015/01/magento-tip-setting-up-free-shipping Jan 14, 2016 at 10:01
  • create shopping cart rule for the particular shipping method.
    – Abdul
    Jan 14, 2016 at 11:27
  • @Abdul I'm trying to do it with a shopping cart rule but i can't do it work. In conditions I've created the condition "Shipping Method is [shipping method]" but in chekout all the shipping methods seems to be free.
    – David G
    Jan 15, 2016 at 8:18

3 Answers 3

1

Try selecting a specific shipping method under Free Method in System -> Configuration -> Shipping Methods and expanding your shipping method of choice. Then, expand all other shipping methods and make sure "Free Method" is set to "none". Ensure this option hasn't also been set in another scope. enter image description here

1

Follow bellow steps

Step : 1

Go admin side Promotions -> Shopping Cart Price Rules create new rules to free shipping apply to particular order amount for the login customer

Step : 2 Follow bellow screen shot for condition

enter image description here enter image description here enter image description here

Step : 3 Check frontend

enter image description here

Note : Above example to shipping method Flat Rate pls set your shipping method to above code & order subtotal

7
  • Thanks @Abdul but still not working for me :(
    – David G
    Jan 18, 2016 at 10:57
  • what is issue ?Which shipping method are need to free?
    – Abdul
    Jan 18, 2016 at 11:05
  • I've got 2 shipping methods, flat rate and table rates. I want to make free the flat one, when some conditions are ok. But the 2 methos are free when the conditions are ok and i don't know why
    – David G
    Jan 18, 2016 at 11:09
  • open file app\code\core\Mage\Shipping\Model\Carrier\Flatrate.php
    – Abdul
    Jan 18, 2016 at 11:24
  • and add code bellow code if($request->getBaseSubtotalInclTax() > 65) { $shippingPrice = '0.00'; }
    – Abdul
    Jan 18, 2016 at 11:27
0

I had a similar problem and I found a solution inspired by the Abdul comment

The Problem: Multistore website with multiple shipping method: flatrate, matrixrate. In some store the free shipping rule should be applied only to matrixrate and not flatrate, in some others should be applied to flatrate.

The Solution: Use the rule like explaned here with whatever condition but the shipping method one. Then create a module that extend the Flatrate model (or the one witch shouldn't be affected by the rule) for prevent to apply the shipping rule according to a configuration specific for website.

Adding the configuration file (system.xml):

<?xml version="1.0"?>
<config>
    <sections>
        <carriers>
            <groups>
                <flatrate>
                    <fields>
                        <ignore_freeshipping translate="label">
                            <label>Ignore Free Shipping Promotions</label>
                            <frontend_type>select</frontend_type>
                            <source_model>adminhtml/system_config_source_yesno</source_model>
                            <sort_order>100</sort_order>
                            <show_in_default>1</show_in_default>
                            <show_in_website>1</show_in_website>
                            <show_in_store>0</show_in_store>
                        </ignore_freeshipping>
                    </fields>
                </flatrate>
            </groups>
        </carriers>
    </sections>
</config>

The Flatrate model rewrite:

<?php

class Ac_Freeshipping_Model_Carrier_Flatrate extends Mage_Shipping_Model_Carrier_Flatrate
{
    /**
     * rewrite original method, with condition to freeshipping
     *
     * @param Mage_Shipping_Model_Rate_Request $data
     * @return Mage_Shipping_Model_Rate_Result
     */
    public function collectRates(Mage_Shipping_Model_Rate_Request $request)
    {
        if (!$this->getConfigFlag('active')) {
            return false;
        }

        $freeBoxes = 0;
        if ($request->getAllItems()) {
            foreach ($request->getAllItems() as $item) {

                if ($item->getProduct()->isVirtual() || $item->getParentItem()) {
                    continue;
                }

                if ($item->getHasChildren() && $item->isShipSeparately()) {
                    foreach ($item->getChildren() as $child) {
                        if ($child->getFreeShipping() && !$child->getProduct()->isVirtual()) {
                            $freeBoxes += $item->getQty() * $child->getQty();
                        }
                    }
                  ////////////HERE I CHECK IF THE CONFIGURATION IS SET FOR SKIP FREE SHIPPING RULES
                } elseif ($item->getFreeShipping() && !Mage::helper('ac_freeshipping')->flatrateIgnoreFreeShipping()) {
                    $freeBoxes += $item->getQty();
                }
            }
        }
        $this->setFreeBoxes($freeBoxes);

        $result = Mage::getModel('shipping/rate_result');
        if ($this->getConfigData('type') == 'O') { // per order
            $shippingPrice = $this->getConfigData('price');
        } elseif ($this->getConfigData('type') == 'I') { // per item
            $shippingPrice = ($request->getPackageQty() * $this->getConfigData('price')) - ($this->getFreeBoxes() * $this->getConfigData('price'));
        } else {
            $shippingPrice = false;
        }

        $shippingPrice = $this->getFinalPriceWithHandlingFee($shippingPrice);

        if ($shippingPrice !== false) {
            $method = Mage::getModel('shipping/rate_result_method');

            $method->setCarrier('flatrate');
            $method->setCarrierTitle($this->getConfigData('title'));

            $method->setMethod('flatrate');
            $method->setMethodTitle($this->getConfigData('name'));

            ////////////HERE I CHECK IF THE CONFIGURATION IS SET FOR SKIP FREE SHIPPING RULES
            if (($request->getFreeShipping() === true || $request->getPackageQty() == $this->getFreeBoxes()) && !Mage::helper('ac_freeshipping')->flatrateIgnoreFreeShipping()) {
                $shippingPrice = '0.00';
            }


            $method->setPrice($shippingPrice);
            $method->setCost($shippingPrice);

            $result->append($method);
        }

        return $result;
    }
}

The complete module is here: https://github.com/andreacanton/magento-freeshipping-rule

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.