It’s amazing how many complicated solutions there are out there to what seems like a relatively simple problem. After reading loads of blog posts and forum discussions on this topic, I stripped the information down to this solution, which may or may not work in your case. My situation is this:
I run a Magento shop and need to offer free shipping on a single item. It may grow to be a whole category, but the solution is the same. I ship with table rates and do not offer free shipping “over XX dollars/pounds/euros”. I am currently using Magento (free) 220.127.116.11.
Here’s what I did to offer free shipping on one specific product:
First, turn on Free Shipping in your Admin Panel > System > Configuration > Sales > Shipping Methods > Free Shipping.
VERY IMPORTANT: set a bogus Minimum order amount – I used 9999999999.99 because if someone spends that much at my shop in one go, I’m retiring.
Second, go to Admin Panel > Promotions > Shopping Cart Price Rules.
Add New Rule.
Use these exact settings:
Rule Name: [you decide]
Description: [you decide]
Customer Groups: [select all, unless you have a reason not to]
Coupon Code: [blank]
Uses Per Coupon: 0
Uses Per Customer: 0
From Date: [today, unless you have a later start date]
Public in RSS Feed: No [unless you have a reason to say Yes]
Next section of the rule: Conditions: [ignore this section]
Last section: Actions:
Apply: Fixed amount discount
Discount Amount: 0
Minimum Qty Discount is Applied to: 0
Discount Qty Step (Buy X): 0
Free Shipping: For shipment with matching items or For matching items only [whichever fits your situation best]
Stop further rules processing: No
Apply the rule … :
If ALL of these conditions are TRUE:
SKU is [insert specific SKU, and then hit the green checkmark]
Category is [get the category ID from the Manage Categories page; ID shows up if you click on a file tree category folder]
If you need to do this Free Shipping thing with only a handful of products, just add more SKU rules in that last step. If that is the case, change the “If ALL of these conditions … ” to ANY.
Hope this helps someone out there. It’s working for me. I am not a Magento expert, though my shop runs pretty well. For expert help, visit the Magento Forums.