我知道WooCommerce在这里并不受欢迎,因为它与WordPress没有直接关系,但由于WooCommerce论坛上的支持太糟糕了,这里的人已经证明了他们的能力和知识,我将尝试一下。
我们的一个客户希望显示/隐藏特定用户组的特定支付网关。Here\'s the situation:
用户组A:客户用户组B:公司
Only B is supposed to be able to pay via invoice, so after they receive the goods.
Here\'s where I\'m at so far:
add_filter( \'woocommerce_available_payment_gateways\', \'payment_gateway_disable_private\' );
function payment_gateway_disable_private( $available_gateways ) {
if ( isset( $available_gateways[\'authorize\'] ) && $woocommerce->customer->get_role($role) <> \'Company\' ) {
unset( $available_gateways[\'authorize\'] );
} else if ( isset( $available_gateways[\'cheque\'] ) && $woocommerce->customer->get_role($role) == \'Customer\' ) {
unset( $available_gateways[\'cheque\'] );
}
return $available_gateways;
}
“支票”是用于发票支付的支付网关的名称。
它还不起作用,那么我错过了什么呢?非常感谢您的帮助!
最合适的回答,由SO网友:Adam 整理而成
Arrrg一个WooCommerce问题。。。快把他烧死
上面的回调函数有几个问题:
您没有声明global $woocommerce
因此您无权访问$woocommerce
全局变量和$woocommerce->customer
保持的状态WC_Customer
类,但该类不包含get_role()
方法,并且您没有在回调中的任何位置定义$role
变量,因此即使该方法存在,也无法正常工作相反,请在上返回的角色数组中检查用户角色WP_User
对象:
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[\'authorize\'] ) && in_array(\'company\', $user->roles) ) {
unset( $available_gateways[\'authorize\'] );
} else if ( isset( $available_gateways[\'cheque\'] ) && in_array(\'customer\', $user->roles) ) {
unset( $available_gateways[\'cheque\'] );
}
return $available_gateways;
}
注意:如果用户已注销,则他们将没有任何角色,因此您可能希望对此进行说明,并执行一些不同的操作,例如将用户重定向到购物前先登录,具体取决于您的用例,您可以使用
is_user_logged_in()
为此。