使用wp_login hook登录的用户可能尚未设置为当前用户,因此使用wp_get_current_user(), 使用传递给挂钩回调的用户对象。然后,您可以确定您正在为正确的用户设置角色,而不是依赖全局状态,这是不可靠的。最好使用通过全局状态传递给回调的参数。
此外,使用user_can() 不鼓励检查角色。内部user_can() 使用$user->has_cap(), 其中包含此注释its documentation:
虽然在一定程度上支持对角色代替功能进行检查,但不鼓励这种做法,因为它可能会产生不可靠的结果。
而是检查$user->roles 对于用户的角色。我也会考虑检查用户是否是客户,而不是管理员。
考虑到这两点,您的代码如下所示:
add_action(
\'wp_login\',
function( $user_login, $user ) { // We want $user
if ( in_array( \'customer\', $user->roles ) ) {
$user->set_role( \'wholesale-customer\' );
}
},
10,
2 // Necessary for us to get $user
);
另一件需要考虑的事情是,如果您使用
WooCommerce Wholesale Prices 插件,用户角色实际上是
wholesale_customer, 使用下划线,而不是破折号。