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 businessbloomer.com/woocommerce-customization
* @author Rodolfo Melogli, Business Bloomer
* @compatible WooCommerce 7
* @community https://businessbloomer.com/club/
*/
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 businessbloomer.com/woocommerce-customization
* @author Rodolfo Melogli, Business Bloomer
* @compatible WooCommerce 7
* @community https://businessbloomer.com/club/
*/
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;
}