I have set up free shipping on a specific product using the Shipping Profiles section.
However, when a user adds an additional product to cart that does not have free shipping, it overrrides the free shipping and instead charges shipping on the other products.
Is there a way to make sure that free shipping is applied to the entire cart if an item with free shipping is in the order?
This product also has a discount code agianst it so I cannot offer free shipping via discount code.
What you’re describing sounds consistent with an expected checkout behaviour, which combines shipping rates from different shipping profiles (described in more detail here: Combined rates at checkout - Help doc).
If you decide to create multiple shipping profiles . . . then some orders might contain products from different profiles. When this happens, the separate shipping rates for each product are added together. This provides the customer with a single shipping rate at checkout.
By this rule, when a customer adds a product from profile A (which offers free shipping) and profile B (which offers $5 shipping, for example) to their cart, the total shipping cost they’ll be asked to pay is $5.
What I’d recommend, since you’re looking to avoid this behaviour, is you explore a couple of these apps available in our App Store, to create your own custom shipping rules: