提问者:小点点

禁用来宾和特定用户角色的WooCommerce支付网关


我已经禁用了我站点中的一个用户角色('customer')的发票付款方式,但是现在我需要向此规则添加另一个用户角色('business'),我不知道如何使其工作。 当我添加第二个角色时,代码完全停止工作,最终将网关显示给所有用户。

下面是我用来禁用网关的代码:

我不是很有经验的PHP,所以任何帮助将非常感谢。 如果有任何机会,您可以纠正我的代码适合用例,我将非常感谢。

add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_private' );

 function payment_gateway_disable_private( $available_gateways ) {

    $user = wp_get_current_user();

    if ( isset( $available_gateways['igfw_invoice_gateway'] ) && !is_user_logged_in() || isset( $available_gateways['igfw_invoice_gateway'] ) && in_array('customer', $user->roles)  ) {
        unset( $available_gateways['igfw_invoice_gateway'] );
    }

   return $available_gateways;

}

思想?


共1个答案

匿名用户

if语句中有一个错误(也可以对用户角色使用current_user_can()函数),例如:

add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_private' );
function payment_gateway_disable_private( $available_gateways ) {
    if ( ( ! is_user_logged_in() || current_user_can('customer') || current_user_can('business') ) 
    && isset( $available_gateways['igfw_invoice_gateway'] ) ) {
        unset( $available_gateways['igfw_invoice_gateway'] );
    }
   return $available_gateways;
}

或者使用全局$CURRENT_USER;array_intersect()函数:

add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_private' );
function payment_gateway_disable_private( $available_gateways ) {
    global $current_user;

    // Here define your user roles
    $user_roles = array( 'customer', 'business' );

    if ( ( ! is_user_logged_in() || array_intersect( $current_user->roles, $user_roles ) ) 
    && isset( $available_gateways['igfw_invoice_gateway'] ) ) {
        unset( $available_gateways['igfw_invoice_gateway'] );
    }
   return $available_gateways;
}

现在应该能奏效了。