按角色过滤可用的WooCommerce支付网关

时间:2015-07-29 作者:theHubi

我知道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;
}
“支票”是用于发票支付的支付网关的名称。

它还不起作用,那么我错过了什么呢?非常感谢您的帮助!

1 个回复
最合适的回答,由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() 为此。

结束

相关推荐