WordPress有条件添加次要角色

时间:2018-07-31 21:46:03

标签: php wordpress

我需要创建一个类似于以下功能的函数:

主要用户角色是订户,但不是其他任何次要角色吗?然后将辅助角色“ Staff”添加到用户。所以他们是订户和员工。

我很讨厌条件PHP。谁能给我一个干净的功能?

1 个答案:

答案 0 :(得分:1)

那里有一些可能有用的用户角色插件,例如Multiple Roles。我个人没有使用过它,所以我无法证明它的表现如何。如果只想使用简单的功能,则需要在add_role()对象上使用WP_User函数。

因此,请根据需要获取用户对象:

  • 如果要对当前登录的用户执行此操作,请使用wp_get_current_user()
  • 如果要按用户ID进行操作,则可以使用get_userdata()
  • 如果您想通过其他用户字段(用户名,电子邮件等。注意:ID在这里也起作用)执行此操作,请使用get_user_by()

要为已登录的任何用户运行此命令,可以使用以下命令:

add_action( 'init', 'add_staff_role_to_subscriber');
function add_staff_role_to_subscriber(){
    if( is_user_logged_in() ){
        $user = wp_get_current_user();

        // If user is a Subscriber with NO other roles
        if( $user->roles[0] == 'subscriber' && ! isset( $user->roles[1] ) ){
            $user->add_role('staff');
        }
    }
}

它的作用是确保当前用户已登录,然后获取该用户的WP_User对象。 $user->roles是一维数组,因此您可以通过确保{{来确保分配给他们的唯一角色是subscriber,并且在数组中没有第二个$role 1}}未设置或为假。

一旦向用户添加了$user->roles[1]角色,由于staff将被设置为$user->roles[1],或者如果他们已经具有第二角色,则if语句将始终为false。不会影响他们。

请注意,在您的问题中,您将staff大写,但是在WordPress中角色是小写的,因此我在代码中将Subscriber小写了。在执行此代码之前,您可能需要确保大小写匹配。