Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 禁用来宾和特定用户角色的WooCommerce支付网关_Php_Wordpress_Woocommerce_Payment Gateway_User Roles - Fatal编程技术网

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

Php 禁用来宾和特定用户角色的WooCommerce支付网关,php,wordpress,woocommerce,payment-gateway,user-roles,Php,Wordpress,Woocommerce,Payment Gateway,User Roles,我已经为我的站点(“客户”)中的一个用户角色禁用了发票付款方法,但现在我需要将另一个用户角色(“业务”)添加到此规则中,我无法确定如何使其工作。当我添加第二个角色时,代码将完全停止工作,并最终向所有用户显示网关 下面是我用来禁用网关的代码: 我对PHP不是很有经验,所以非常感谢您的帮助。 如果您有机会修改我的代码以适应用例,我将不胜感激 add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_p

我已经为我的站点(“客户”)中的一个用户角色禁用了发票付款方法,但现在我需要将另一个用户角色(“业务”)添加到此规则中,我无法确定如何使其工作。当我添加第二个角色时,代码将完全停止工作,并最终向所有用户显示网关

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

我对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;

}

想法

您的if语句中有一个错误(您也可以对用户角色使用
current\u user\u can()
函数),例如:

或者使用
全局$current\u用户
数组_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;
}

它现在应该可以更好地工作。

在数组中
检查数组中是否存在值,如果要比较多个值,则不应将字符串与数组进行比较,而应将数组与数组进行比较。请参阅答案(检查多个角色的部分以及如何完成),我是否也可以提请您注意(在您编辑问题之后),因此不是“代码编写服务”。这个想法是开始尝试,而不是让别人为你做这件事。请阅读和阅读。
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;
}