Intereting Posts
Запуск последней версии jQuery в дочернюю тему возвращает пустой экран Как мне нужно регистрировать JavaScript, который не является файлом? Связывание текста в textarea пользовательского мета-окна Можно ли использовать WordPress в качестве онлайн-портфолио для текстового контента? Какую тему я бы искал? Использование Ajax с файлом класса Получение предупреждений и уведомлений от Fresh WordPress 3.1.2 Добавьте класс в элемент меню верхнего уровня, если он имеет несколько дочерних уровней Альтернативные стили сообщений на главной странице Внутренние ссылки меню не изменяются после дублирования веб-сайта WordPress Замена выпадающего элемента NavWalker WP-CLI зависает после установки плагина и добавляет строки в таблицы sitemeta и options Страница пользовательской таксономии? Как сортировать сообщения по более низкому существующему значению двух метазначений с помощью WP_Query? Добавление мета-поля настраиваемого типа сообщения в rss Фрагментация в коротком коде всегда отображается сверху

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

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

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

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

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

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

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

Роли

Прежде всего, вам нужно зарегистрировать 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

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