php - 为客人和特定用户角色禁用 WooCommerce 支付网关
问题描述
我已经为我的站点中的一个用户角色(“客户”)禁用了发票付款方式,但现在我需要在此规则中添加另一个用户角色(“业务”),但我不知道如何使它工作. 当我添加第二个角色时,代码完全停止工作,最终向所有用户显示网关。
这是我用来禁用网关的代码:
我对 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;
andarray_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;
}
它现在应该更好地工作。
推荐阅读
- mysql - 加入 WHERE 并添加计算列
- abap - 未找到存档计费参数的值
- java - 为拍摄的图像添加新名称的方法
- authentication - 为了构建公共 sdk,我需要选择哪个 oauth 或 openid-connect?
- visual-studio - 有没有 VisualSVN 或 AnkhSVN 的免费替代品?
- sass - 扩展 bootstrap 4 边距大小
- java - IntelliJ IDEA 警告“不必要的 'Arrays.asList' 调用”
- java - 无法获取总金额
- python - 按周和月聚合 Pandas 数据框
- apache-kafka - 如何将两个订购者添加到同一个频道?