Hide Payment Methods Based on Shipping Class in the Cart

As you probably know, shipping classes apply to every product individually.

What does it mean for us? It means that we have to loop through all the products in the cart in our code and check their shipping classes using either get_shipping_class() or get_shipping_class_id() methods.

WooCommerce product shipping classes
In this example I created a new shipping class “No PayPal” (in WooCommerce > Settings > Shipping > Shipping Classes), so if there are products in the cart with this shipping class we are going to deactivate PayPal payment gateway.

Also we have two options here – if any product in the cart has a specific shipping class or if all the products in the cart have the specific shipping class.

How to Find Shipping Class ID?

When I create conditions with shipping classes in my code I usually use get_shipping_class() method, so I can check against shipping classes slugs, example. Slugs can easily be found in WooCommerce > Settings > Shipping > Shipping Classes.

But what you have to use get_shipping_class_id() method? Where and how to get a specific shipping class ID then?

First of all – you can inspect the code in your browser and find it there. In order to do that – please open product edit page and find “Product data” metabox. Go to “Shipping” tab and inspect “Shipping class” dropdown element.

Disable Payment Gateway based on Shipping Method

Enable payment gateway by shipping method in WooCommerce
In this example we have three payment gateways – COD, PayPal and Credit Card. We deactivate “Cash on delivery” payment method for local pickups.