I’ll teach you how to enable or disable WooCommerce payment gateways for a certain user role in this article. It is often necessary to disable WooCommerce payment methods based on user roles.
For instance, you could wish to conceal the Cash on Delivery method from logged-out users.
Disable Payment Gateways Methods for a Specific User Role
In this first example, I will conceal the Cash On Delivery (COD) payment mechanism from specific user roles. Simply copy the code below and paste it into your theme’s functions.php file, or better yet, yer
<?php
add_filter( 'woocommerce_available_payment_gateways', 'cxc_disable_cod_payment_gateway_function' );
function cxc_disable_cod_payment_gateway_function( $available_gateways ) {
//Disable Payment Gateways Methods for a Specific User Role customer
if( current_user_can( 'customer' ) ) {
if ( isset( $available_gateways[ 'cod' ] ) ) {
unset( $available_gateways[ 'cod' ] );
}
// if you need to disable multiple payment gateways just add similar code
// if ( isset( $available_gateways[ 'cxc_payment_gateway_2' ] ) ) {
// unset( $available_gateways[ 'cxc_payment_gateway_2' ] );
// }
}
return $available_gateways;
}
?>
Enable Payment Gateways Methods for a Specific User Role
<?php
add_filter( 'woocommerce_available_payment_gateways', 'cxc_disable_cod_payment_gateway_function' );
function cxc_disable_cod_payment_gateway_function( $available_gateways ) {
//Enable Payment Gateways Methods for a Specific User Role customer
if( ! current_user_can( 'customer' ) ) {
if ( isset( $available_gateways[ 'cod' ] ) ) {
unset( $available_gateways[ 'cod' ] );
}
// if you need to disable multiple payment gateways just add similar code
// if ( isset( $available_gateways[ 'cxc_payment_gateway_2' ] ) ) {
// unset( $available_gateways[ 'cxc_payment_gateway_2' ] );
// }
}
return $available_gateways;
}
?>
Enable Payment Gateway Methods for Registered User
<?php
add_filter( 'woocommerce_available_payment_gateways', 'cxc_disable_cod_payment_gateway_user_not_logged_in', 999 );
function cxc_disable_cod_payment_gateway_user_not_logged_in( $available_gateways ) {
if( ! is_user_logged_in() ) {
if ( isset( $available_gateways[ 'cod' ] ) ) {
unset( $available_gateways[ 'cod' ] );
}
// if you need to disable multiple payment gateways just add similar code
// if ( isset( $available_gateways[ 'cxc_payment_gateway_2' ] ) ) {
// unset( $available_gateways[ 'cxc_payment_gateway_2' ] );
// }
}
return $available_gateways;
}
?>
If you believe this code saved you time and money, please subscribe to our blog post updates. Thank you so much 😉
Also Read:
How to Edit Payment Gateway Title and Description in WooCommerce
How to add content after or before the ‘add to cart’ button on single product page woocommerce