Hello Katie,
Thank you for your interest in our plugin. I understand that you have two shipping methods: one free and another with cost calculation, both set up using Advanced Shipping Rates for WC (formerly known as Fish and Ships—don’t worry, it’s the same plugin).
For the free shipping method, you likely have something like:
#1 WHERE In Shipping Class (class 1, class 2, class 3), Price 0.
This is absolutely correct, but keep in mind that a shipping method will be available if any of its rules are met. For this reason, it is still eligible even if there are paid products in the cart.
Basically, there are two ways to achieve what you want:
- Merge all the rules into a single method that adds costs based on the product type. It would remain at zero (free shipping) only if all applied rules result in a cost of 0.
- Keep the two methods: A simpler and clearer way, which takes advantage of your current setup (and the one I’d recommend you try), is to add an abort rule when free shipping should not be available. You can do this by adding the following rule:
WHERE NOT In Shipping Class (class 1, class 2, class 3), Price 0, Special Action "Abort shipping method".
That should be enough. To keep the things simple, you can change then the “In shipping class” selector to “Always”, because the negative selector will do all the job.
Please give me feedback on whether my assumptions about your shipping method configuration are correct and if this solution worked for you. Otherwise, feel free to send me more detailed information about your current setup.
Kind regards,
Carles Martin
wp-centrics
Thread Starter
wandw1
(@wandw1)
Thanks so much for your help. I think it was the ‘abort shipping’ that got me confused, I now have it all fixed by setting up a rule so that if it is a paid shipping item it aborts, kind of the opposite to what you suggested but it works. Thanks again for all your help!
Glad to help… it’s the same:
- In positive logic, as you did: IN shipping class “paid” => abort free shipping method.
- In negative logic, as I said: NOT IN shipping class “free shipping” => abort free shipping method.
The best approach is the one that involves fewer shipping classes, requires fewer changes in the future when adding new products/classes, or minimizes the work needed to assign shipping classes—reducing the risk of mistakes.
What’s your main scenario: more free shipping or more paid products?
In other words, if you forget to assign a class to a new product (or leave it without a shipping class), what would you prefer? Free shipping or not?
- If you prefer free shipping by default, then positive logic is the best option.
- If you prefer to block free shipping in such cases, then negative logic is better for you.
Kind regards,
Carles Martin
wp-centrics
PD: By the way, if you’re happy with our product and the support you’ve received, we’d really appreciate it if you could leave us a review. 🙂