Wordpress条件添加辅助角色

问题描述 投票:0回答:1

我需要创建一个像以下一样的函数:

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

我厌倦了有条件的PHP。谁能给我一个干净的功能?

php wordpress
1个回答
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,确保未设置$user->roles[1],或者为false。

一旦将staff角色添加到用户,if语句将始终为false,因为$user->roles[1]将设置为staff,或者如果它们已经具有次要角色,则它将不会影响它们。

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

© www.soinside.com 2019 - 2024. All rights reserved.