将用户分组到父用户下

时间:2015-12-17 作者:N00b

它需要是什么样的:

一个具有用户角色的“超级用户”公司,一个具有用户角色的普通用户,一个员工,我不希望“超级用户”拥有更多功能,尤其是类似管理员的功能。

我不想用自定义帖子来模仿公司,因为postmeta 这张桌子和其他桌子相比已经太大了。此外,我还需要能够登录,并且“超级用户”可以在前端管理其用户。

  • 普通用户应该可以通过“超级用户”查询,也就是说,可以查询该特定公司的所有员工。

  • How to make that kind of connection between user and "super user"? 明显地usermeta 这是一条路,但如何做到这一点?我不需要一个庞大的代码,我需要一个如何工作的想法。

    1 个回复
    最合适的回答,由SO网友:gmazzap 整理而成

    角色

    首先,您需要注册这两个角色,请查看add_role.

    注册角色后,您可以自由分配所需的任何功能。

    只需在主题/插件激活时小心添加角色,并可能将其删除(请参阅remove_role) 禁用时。

    元数据可以使用如下元条目进行关联company_employees 存储用户ID数组的。您可以关联一些自定义函数,以获取/设置公司用户的员工。

    获取公司员工的函数示例代码,该函数返回给定用户的员工数组:

    function getEmployees(\\WP_User $user) {
      // if the user has not the role "company_role" can\'t have employees
      if ( ! in_array(\'company_role\', $user->roles, true) ) {
        return array();
      }
      $meta = get_user_meta($user->ID, \'company_employees\', true);
      if (empty($meta)) {
        return array();
      }
    
      $query = new WP_User_Query(array(
        \'role\'    => \'employee_role\',
        \'include\' => (array) $meta
      ));
    
      return $query->results;
    }
    
    将员工分配到公司

    同样,您可以编写函数将员工分配给公司用户:

    function assignToCompany(\\WP_User $employee, \\WP_User $company) {
      // if the company user has not the role "company_role" can\'t have employees
      if ( ! in_array(\'company_role\', $company->roles, true) ) {
         return false;
      }
      // if the employee user has not the role "employee_role" can\'t be assigned
      if ( ! in_array(\'employee_role\', $employee->roles, true) ) {
         return false;
      }
      // get current employees
      $employees = get_user_meta($company->ID, \'company_employees\', true);
      is_empty($employees) and $employees = array();
      // add employee and update
      $employees[] = $employee->ID;
      $update = update_user_meta($company->ID, \'company_employees\', $employees);
    
      return (int) $update > 0;
    }
    
    当然,您需要某种UI来将员工分配给用户。如果员工可能只有一个公司,则可以在用户编辑页面中显示下拉菜单,列出所有公司,保存时,可以利用上述功能将员工存储在公司用户元中。

    为此:

    看看edit_user_profile 钩住以打印下拉菜单。确保仅向允许编辑员工公司的用户显示菜单查看edit_user_profile_update 钩子以在元字段中保存公司。确保仅在允许当前用户编辑员工公司时才继续保存确保还添加nonce field 打印下拉菜单时,请在继续保存之前进行验证。看见wp_nonce_field()wp_verify_nonce()


    最后一步

    公司用户管理界面

    您可以在用户编辑页面中添加当前分配给公司用户的员工列表。

    使其可编辑是一种奖励。

    实用函数

    您可以添加两个实用函数,如isEmployee(), isCompany() 如果用户具有相关角色,则接受用户对象ot id并返回真/假。

    isEmployee 还可以接受公司用户的可选参数,并且仅当用户是该特定公司的员工时才返回true。

    自定义功能引入自定义功能可能是个好主意\'assign_employee\' 您可以分配给管理员,以及您希望能够将员工用户分配给公司用户的任何其他角色。当您需要显示RTH公司下拉列表以及必须保存公司元数据时,这可能很有用。

    使用此功能,您可以检查是否允许用户使用current_user_can(\'assign_employee\').

    要将自定义功能分配给现有角色,请查看WP_Roles::add_cap().

    如果您决定这样做,请记住在禁用插件/主题时删除该功能。

    前端公司页面不知道您是否需要它,但您可以使用自定义page template 和acustom endpoint 显示用户公司描述和所有员工的列表