Woocommerce - 隐藏支付网关“cod - 货到付款”并显示 bacs - 银行转账

Woocommerce - Hide payment gateway “cod - cash on delivery” and show bacs - Bank Transfer

伙计们,

我在结帐页面上使用了两个支付网关:

1° bacs = 银行转帐
2° cod = 货到付款

我需要隐藏支付网关COD = 货到付款,如果用户没有管理员配置文件(!is_user_admin()),||或者没有记录,|| ! is_user_logged_in() 然后隐藏。

这是我正在使用的代码,它正在运行。

add_filter( 'woocommerce_available_payment_gateways', 'bbloomer_cod_hide' );
  
function bbloomer_cod_hide( $available_gateways ) {
   if ( isset( $available_gateways['cod']) && !is_user_admin() ) {
      unset( $available_gateways['cod'] );
   } 
   return $available_gateways;
}

问题是...支付网关 bacs = 银行转账 也受到影响并被隐藏:)

所以我尝试了另一个钩子

add_filter( 'woocommerce_available_payment_gateways', 'transfer_enable_bacs' );
  
function transfer_enable_bacs( $available_gateways ) {
   if ( isset( $available_gateways['bacs']) && !is_user_admin() ) {
      //unset( $available_gateways['bacs'] );
   } 
   return $available_gateways;
}

但这不是正确的解决方案。两个支付网关都被隐藏了。

请问我做错了什么?
感恩!

我认为您需要将 is_user_admin 替换为 current_user_can

add_filter( 'woocommerce_available_payment_gateways', 'bbloomer_cod_hide' );
      
    function bbloomer_cod_hide( $available_gateways ) {
       if ( isset( $available_gateways['cod'] ) && ! current_user_can( 'administrator' ) ) {
          unset( $available_gateways['cod'] );
       } 
       return $available_gateways;
    }

is_user_admin不检查用户是否是管理员;使用 current_user_can() 检查角色和能力。

https://developer.wordpress.org/reference/functions/is_user_admin/

试试下面的代码:

add_filter('woocommerce_available_payment_gateways','bbloomer_cod_hide');

function bbloomer_cod_hide( $available_gateways ) {
   if ( !is_user_logged_in() ) || !current_user_can( 'install_themes' ) ) {
      unset( $available_gateways['cod'] );
   } 
   return $available_gateways;
}