为来宾和特定用户角色禁用 WooCommerce 支付网关
Disable WooCommerce payment gateway for guests and specific user roles
我已经为我站点中的一个用户角色 ('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;
}
想法?
您的 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;
}
或使用 global $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;
}
现在应该可以更好地工作了。
我已经为我站点中的一个用户角色 ('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;
}
想法?
您的 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;
}
或使用 global $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;
}
现在应该可以更好地工作了。