It’s straightforward to restrict shipping destinations in WooCommerce. All you need to do is to specify the countries to which you ship, or even the states or counties within those countries. And for countries to which you do not ship, you simply do not set up a shipping option. Then when the customer looks in the list of destination countries, they see whether their country is listed.
It is also straightforward to restrict shipping destinations in WooCommerce for some products but not for others. You simply create a shipping class for that range of products and list the restricted list of countries to which you ship.
But beware how WooCommerce behaves at checkout when you mix products that have different shipping restrictions.
The reason I looked into any of this is that we ship most of our products to a whole range of countries. But currently we only ship our mounted prints within the UK.
The Shipping Cost Problem Illustrated
Let’s suppose you sell some products to a lot of countries and some products only with your home country. You might want to do this for bulky or fragile items, for example. You don’t want to be responsible for shipping bulky or fragile items to the other side of the world. At the same time, you are happy to ship small items to the other side of the world.
Suppose the bulky or fragile items are expensive to ship. Or for whatever reason, you don’t want to ship them outside your home country. This pepper in a bowl mounted print will serve as an example, and let’s say you have a complete range of mounted prints that you don’t want to ship outside your home country.
You add them to your catalogue and you set up shipping costs for for your home country. And because you are not going to ship outside your home country, you do not set up shipping costs for that item for any other countries.
Let’s test how it works. You add that item to the basket and you say you are a customer in another country. What will happen is that the checkout will flag that it does not have a shipping option for that country. That’s expected behaviour and it’s what we would want.
But now you also add a low-value product that you do ship to many countries to the basket. Then WooCommerce will override the ‘home country’ rule and charge shipping based on the products that you do ship abroad. That is definitely not what you want, not least because you will be charging shipping based on the cost to ship that low-value item.
Solutions To Restrict Shipping Destinations For Some Products Only
There are two or three ways to solve it.
One way, and probably the least satisfactory way, is to set up shipping costs for all countries you ship your other products to. And you make the shipping costs so high that no one from another country will buy the product. They get all the way to the checkout or the basket and then find out that shipping to their country is astronomical. It’s a solution that’s almost guaranteed to make customers unhappy.
And what happens if there is a problem with the product and the customer wants to return it. Then the customer finds out that the cost of shipping back is a fraction of the cost you charged to ship the product. Now that customer is going to be doubly unhappy. So while this is a solution of sorts, it’s not a particularly good solution.
Another solution if you can code is that you can write the code to deal with it, but many people don’t have developer skills.
And that leaves the third solution, which is to use the WooCommerce Advanced Shipping Packages extension. It’s not expensive at $49 per year plus tax.
The lesson though, is that you have to test in order to see how the cart and the checkout works with mixed products with different shipping restrictions. WooCommerce wasn’t able to handle this scenario out of the box and if I hadn’t tested I might have found out when a customer chose options that triggered that behaviour.