Intereting Posts
Использовать метаданные для переноса элементов самостоятельно Пользовательское мета-поле не дает мне числового значения Как отобразить TinyMCE без wp_editor () Auto-Update Plugin Создание каталога .tmp, а не переписывание старой версии Имея 4000 сообщений, мой сайт настолько медленный Разделение магазина электронной коммерции из темы WordPress WordPress permalinks и javascript перенаправление Количество слов неточно – потенциальная ошибка Кнопки TinyMCE, запускающие формы, созданные Ajax Вариант бэкэнд для включения javascript-файла на определенные страницы? wp_ajax не вызывает действие Динамический DropDown в форме контакта 7 Как меню WP разбиение на страницы разбито – нажатие следующих дисплеев "страница не найдена" Как показать сообщение «Комментарии закрыты» на сообщениях, где комментарии были закрыты? Есть ли крючок / действие, которое запускается при добавлении или удалении миниатюры сообщений?

Группирование пользователей под родительским пользователем

Что ему нужно:

  • один «суперпользователь» с пользовательской ролевой компанией
  • обычные пользователи с ролью пользователя

  1. Я не хочу, чтобы «суперпользователь» мог иметь больше возможностей, особенно административные возможности.

  2. Я не хочу использовать персонализированный пост для подражания компании, потому что таблица postmeta уже становится слишком большой по сравнению с остальными. Также мне нужно как войти в систему, так и «суперпользователь» может управлять своими пользователями в интерфейсе.

  3. Обычные пользователи должны быть запрошены «суперпользователем», а также запрашивать всех пользователей, которые являются сотрудниками этой конкретной компании.

Как установить такую ​​связь между пользователем и «суперпользователем»? Очевидно, что usermeta – это путь, но как подойти к этому? Мне не нужен огромный код, который работает, мне нужна идея, как он будет работать.

Solutions Collecting From Web of "Группирование пользователей под родительским пользователем"

Роли

Прежде всего, вам нужно зарегистрировать 2 роли, посмотрите на add_role .

Когда вы регистрируете роль, вы можете назначить любую необходимую вам возможность.

Только будьте осторожны, чтобы добавить роли, когда ваша тема / плагин активирована и, возможно, удалите их (см. remove_role ), когда она отключена.


Метаданные

Вы можете использовать ассоциацию, используя мета-запись, такую ​​как company_employees которая хранит массив идентификаторов пользователей. Вы можете связать некоторые пользовательские функции, чтобы получить / установить сотрудников для пользователя компании.

Получить сотрудников компании

Пример кода для функции, возвращающей массив сотрудников с учетом пользователя:

 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 при печати выпадающего меню и проверить его, прежде чем продолжить с сохранением. См. wp_nonce_field() и wp_verify_nonce()

Заключительные штрихи

Пользовательский пользовательский интерфейс пользователя

Вы можете добавить список сотрудников, которые в настоящее время назначены пользователю компании на странице редактирования пользователя.

Сделать его редактируемым является бонус.

Полезные функции

Вы можете добавить несколько полезных функций, таких как isEmployee() , isCompany() которые принимают объект пользователя ot id и возвращают true / false, если у пользователя есть соответствующая роль.

isEmployee также может принять необязательный параметр с пользователем компании и вернуть true, только если пользователь является сотрудником этой конкретной компании.

Индивидуальная возможность

Может быть хорошей идеей ввести пользовательскую функцию 'assign_employee' которую вы можете назначить администраторам, и любую другую роль, которую вы хотите назначить пользователям сотрудников пользователям компании. Это может быть полезно, когда вам нужно отобразить раскрывающийся список компаний и когда вам нужно сохранить компанию meta.

С помощью этой возможности вы можете проверить, разрешено ли пользователю делать это с помощью current_user_can('assign_employee') .

Чтобы назначить пользовательскую возможность существующей роли, посмотрите на WP_Roles::add_cap() .

Если вы решите сделать это, не забудьте удалить эту возможность, когда плагин / тема отключена.

Страница Frontend Company

Не знаете, если вам это нужно, но вы можете создать «фирменную страницу» в интерфейсе, используя собственный шаблон страницы и пользовательскую конечную точку, чтобы показать описание компании и список всех сотрудников