Menu Close

WooCommerce: Disable Payment Gateway By Product Type

default

Ever wondered if you could toggle payment gateways based on whether a given “product type” is in the WooCommerce Cart? For example, disable PayPal if there are simple subscription products, or enable Stripe only when there are variable products?

Well, with this simple code (and the 2 examples) you find below, you can manage to achieve just that. The second example regards the WooCommerce Subscriptions plugin, as this requires some plugin-specific functions to check for the product type. Enjoy!

PHP Snippet 1: Disable Payment Gateway Based on Product Type e.g. “Simple” Product @ WooCommerce Checkout

In this example, we unset “paypal” in case there are “simple” products in the cart. You can also use “grouped” and “variable” (“external” doesn’t count as it requires no on-site payment), as well as other custom type keys added by third party plugins.

/**
 * @snippet       Disable WooCommerce Payment Gateway By Product Type
 * @how-to        Get CustomizeWoo.com FREE
 * @author        Rodolfo Melogli
 * @compatible    WooCommerce 7
 * @donate $9     https://businessbloomer.com/bloomer-armada/
 */

add_filter( 'woocommerce_available_payment_gateways', 'bbloomer_disable_payment_by_product_type' );
 
function bbloomer_disable_payment_by_product_type( $available_gateways ) {
   if ( ! WC()->cart ) return $available_gateways;
   $types = array();
   foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
      $product = $cart_item['data'];
      $types[] = $product->get_type() ? $product->get_type() : null;
   }
   $types = array_unique( $types );
	if ( in_array( 'simple', $types ) && isset( $available_gateways['paypal'] ) ) {
		unset( $available_gateways['paypal'] );
	}
	return $available_gateways;
}

PHP Snippet 2: Disable Payment Gateway Based on WooCommerce Subscriptions Product Type e.g. “Simple Subscription” @ WooCommerce Checkout

In this example, we unset “paypal” in case there are “simple subscription” products in the cart (WooCommerce Subscriptions plugin).

/**
 * @snippet       Disable WooCommerce Payment Gateway By Subscription Product Type
 * @how-to        Get CustomizeWoo.com FREE
 * @author        Rodolfo Melogli
 * @compatible    WooCommerce 7
 * @donate $9     https://businessbloomer.com/bloomer-armada/
 */

add_filter( 'woocommerce_available_payment_gateways', 'bbloomer_disable_payment_by_subscription_product_type' );
 
function bbloomer_disable_payment_by_subscription_product_type( $available_gateways ) {
	if ( class_exists( 'WC_Subscriptions_Cart' ) && WC_Subscriptions_Cart::cart_contains_subscription() && isset( $available_gateways['paypal'] ) ) {
		unset( $available_gateways['paypal'] );
	}
	return $available_gateways;
}
View Source
Posted in WooCommerce Tips