Disable Payment Gateways based on User Role
In this tutorial I will show you how to enable or disable WooCommerce payment gateways for a specific user role. And also how to condition them for registered users.
If you need help with payment gateways – contact me and my team.
All the code below is based on woocommerce_available_payment_gateways
filter hook and can be inserted to your current or child theme functions.php
file or a custom plugin.
Disable Payment Methods for a Specific User Role
/**
* @snippet Disable WooCommerce Payment Gateway for a Specific User Role
* @author Misha Rudrastyh
* @url https://rudrastyh.com/woocommerce/disable-payment-gateway-by-user-role.html
*/
add_filter( 'woocommerce_available_payment_gateways', 'rudr_turn_off_cod' );
function rudr_turn_off_cod( $available_gateways ) {
if( current_user_can( 'subscriber' ) ) {
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[ 'payment_gateway_2' ] ) ) {
// unset( $available_gateways[ 'payment_gateway_2' ] );
// }
}
return $available_gateways;
}
- If you don’t how to get a user role, remember that there are default user roles, like
subscriber
,author
,contributor
,editor
andadministrator
and there are a couple default roles in WooCommerce too –customer
andshop_manager
. - What about a payment gateway ID? How to get it? If you uncomfortable with inspecting source code in your browser, I think the best way is to add a payment gateway ID column.
- If you want to disable a payment method for multiple user roles, you can condition it like
current_user_can( 'subscriber' ) || current_user_can( 'author' )
.
Enable Payment Methods for a Specific User Role
Code is very similar to a previous snippet, the difference is just one symbol! So I just copy the part of it.
if( ! current_user_can( 'subscriber' ) ) {
So we disable our payment gateways for any user role except Subscriber role.
Enable Payment Gateway for Registered Users
This code is also based on a snippet I showed you before, all you need to do is just to change one line of it.
if( ! is_user_logged_in() ) {
So the result is that we disable payment gateway for all users who is not logged in.

Misha Rudrastyh
Hey guys and welcome to my website. For more than 10 years I've been doing my best to share with you some superb WordPress guides and tips for free.
Need some developer help? Contact me
Hey Misha,
first of all, thanks for your blog here, always enjoy your Woocommerce tricks and filters ;-) helps us a lot.
Regarding disable/ enable payment Gateways: Would be great if that could be turned of for specific user id´s instead of the complete role.
This wpuld be helpfull, because in our case we just have 2 roles enabled for our customers, so disablind this by role is not an option.
Hey,
Thank you! I am very glad to hear that! ;)
It can be done with the following condition:
if( 123 === get_current_user_id() ) {
For multiple users:
if( in_array( get_current_user_id(), array( 1, 2 ) ) ) {