角色
首先,您需要注册这两个角色,请查看
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()
.
如果您决定这样做,请记住在禁用插件/主题时删除该功能。