それがどのようなものである必要があります:
私は「スーパーユーザー」にもっと多くの機能、特に管理者のような機能を持たせたくありません。
companyはpostmeta
テーブルが他のテーブルに比べて大きくなり過ぎているため、カスタム投稿を使用したくありません。また、ログインできるようにする必要があります。 -終わり。
通常のユーザーは "スーパーユーザー" a.k.aで特定の会社の従業員であるすべてのユーザーに問い合わせることができます。
どのようにユーザーと "スーパーユーザー"の間でそのような関係を作るのですか? 明らかにusermeta
は行くべき道ですが、どうやってこれに近づくのですか?うまくいく巨大なコードは必要ありません。私はアイデアそれがどのように機能するかを知る必要があります。
まず最初に2つの役割を登録する必要があります。 add_role
を見てください。
役割を登録すると、必要な機能を自由に割り当てられます。
テーマ/プラグインが有効になったときにロールを追加し、無効になったときにロールを削除するように注意してください( remove_role
を参照)。
ユーザーIDの配列を格納する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が必要です。従業員が1つの会社しかない場合は、ユーザー編集ページにドロップダウンメニューを表示してすべての会社を一覧表示し、保存時に上記の機能を利用して従業員を会社のユーザーメタに保存できます。
それをするには:
edit_user_profile
hookを見てドロップダウンメニューを印刷してください。従業員会社の編集を許可されているユーザーにのみメニューを表示するようにしてください。edit_user_profile_update
hookを見て会社をメタフィールドに保存してください。現在のユーザーが従業員会社の編集を許可されている場合にのみ、必ず保存を続行してください。wp_nonce_field()
および wp_verify_nonce()
を参照してください。ユーザー編集ページで、会社のユーザーに現在割り当てられている従業員のリストを追加できます。
編集可能にすることはボーナスです。
isEmployee()
やisCompany()
のように、ユーザーオブジェクトot idを受け取り、ユーザーが関連するロールを持っている場合はtrue/falseを返す、2つのユーティリティ関数を追加できます。
isEmployee
は、会社のユーザーと一緒にオプションのパラメータを受け入れることもでき、ユーザーがその特定の会社の従業員である場合にのみtrueを返します。
管理者に割り当て可能なカスタム機能'assign_employee'
、および従業員ユーザーを会社のユーザーに割り当てられるようにしたいその他の役割に導入することをお勧めします。これは、会社のドロップダウンリストを表示する必要があるとき、および会社のメタを保存する必要があるときに便利です。
この機能が整っていれば、current_user_can('assign_employee')
を使ってユーザーに許可されているかどうかを確認できます。
カスタム機能を既存のロールに割り当てるには、 WP_Roles::add_cap()
を参照してください。
これを行うことにした場合は、プラグイン/テーマが無効になっているときに機能を削除することを忘れないでください。
あなたがそれを必要としているかどうかわからないが、ユーザーの会社の説明と全従業員のリストを表示するためにカスタムの ページテンプレート と カスタムエンドポイント を使ってフロントエンドで "会社ページ"を作成できます