いきなり否定から入って申し訳ありませんが、WordPress標準の「管理者」や「編集者」「投稿者」といった権限グループ(役割)ではなく特別な権限(できること)を持つユーザーの役割を追加したい場合にはプラグインを使うのが妥当かも知れません。
なぜなら、この類のプラグインの多くが管理画面上で権限(できること)を目で見て調整できるからです。
以下がWordPressで標準として追加されている役割と設定できる権限の一覧を示す公式ページなのですが、設定できる権限の多さにびっくりするはずです。
これを自身で調べてコードで書くとなると大変..というのがプラグインの使用をおすすめする理由です。
しかしながらこの類のプラグインのコードはいわば普遍的なものなので、一度リリースしてしまえばセキュリティ上の理由などがない限りあまり更新されないので、不安に思う人も多いでしょう(特に問題はないんですけどね)。
そこで今回はプラグインの代わりにカスタムコードを使って役割を追加する方法と、役割を削除する方法、役割を削除した時にその役割が割り当てられたユーザーを現存する別の役割に自動で変更する方法などを紹介します。
冒頭から「役割」と「権限」という2つの単語を使っていますが、本ページではプロフィール編集画面の「権限グループ」項目で選べるようになる名前のことを「権限グループ」または「役割」、その役割を与えられたユーザーがサイト内でできることを「権限」と呼ぶようこととします。
権限グループやカスタム権限の追加方法
以下のコードで比較的簡単に権限グループは追加できます。
// カスタムユーザーグループを追加
function pwcn_add_custom_user_role() {
add_role(
'pwcn_custom_role', // 新しい権限グループのスラッグ
'カスタムロール', // 新しい権限グループの表示名
array(
'read' => true, // 読み取り権限
'edit_posts' => false, // 投稿編集権限(falseの場合は不可)
'delete_posts' => false, // 投稿削除権限(falseの場合は不可)
)
);
}
add_action('init', 'pwcn_add_custom_user_role');
正常に権限グループが追加されると、ユーザープロフィール編集画面で「カスタムロール」を選択できるようになります。
上記コードでは、「read」権限のみを有効にしているため、サイトの閲覧のみが許可された権限グループとなります。ここに冒頭のリンク先ページにある権限の条件を加えていくことで、独自の権限を持つ権限グループを作ることができます。
また、「設定」→「一般設定」の「新規ユーザーのデフォルト権限グループ」で作成した権限グループを指定しておけば、新規登録したユーザーは自動的にこの権限グループが割り当てられるようになります。
試験的に追加した権限グループは、削除しない限り選択可能なままになりますので、次項を参考に必ず削除を行いましょう
既に追加されている権限グループに権限を追加する方法
既に登録済の権限グループへ権限を追加するには以下のコードを使います。
function pwcn_add_capabilities_to_multiple_roles() {
// 権限を追加する対象となる権限グループを配列で指定
$roles = array('editor', 'author', 'contributor'); //この場合は編集者・投稿者・寄稿者
foreach ($roles as $role_name) {
$role = get_role($role_name); // 各権限グループを取得
if ($role) {
// 任意のカスタム権限を追加
$role->add_cap('custom_capability');
$role->add_cap('another_custom_capability'); // 必要なだけ設定を追加
}
}
}
add_action('init', 'pwcn_add_capabilities_to_multiple_roles');
新規登録したユーザーに権限グループを割り当てる方法
基本的に新規登録したユーザーは、管理画面の「設定」→「新規ユーザーのデフォルト権限グループ」で指定した権限グループが割り当てられますが、プラグインなどからこの設定を制御したい場合には以下のコードを使います。
function pwcn_assign_custom_role_to_new_user($user_id) {
$user = new WP_User($user_id);
$user->add_role('custom_role'); // ユーザーに権限グループを割り当て
}
add_action('user_register', 'pwcn_assign_custom_role_to_new_user');
追加した権限グループや権限での条件分岐
混乱される方もいると思いますので改めて..。権限とはサイトの中でできること、権限グループとは複数の権限を持つ役割のことを言います。従ってプロフィール編集画面の「権限グループ」で何気なく選択している「閲覧者」「寄稿者」「投稿者」などにはたくさんの権限が付与され、サイトの中でできることの切り分けがされているのです。
権限や権限グループを使う目的はこの「できること」によって処理を分けることだと思いますので、最後にこれらによって処理を分岐する(条件分岐する)コード例を紹介しておきます。
特定の権限を持つ、または権限グループに属しているかどうかで切り分けるコード例
権限グループに属しているかどうか、特定の権限を持つかどうかは同じ「current_user_can()」という関数で識別でき、以下のコードをユーザー定義関数の中などに挿入して分岐させます。
//権限グループまたは権限を配列で指定
$capabilities = array('edit_posts', 'delete_posts', 'custom_capability');
foreach ($capabilities as $cap) {
if (current_user_can($cap)) {
// 権限グループに属している、または権限を持っている場合の処理
echo "ユーザーは {$cap} 権限を持っています。";
} else {
// 権限を持っていない場合の処理
echo "ユーザーは {$cap} 権限を持っていません。";
}
}
権限グループと権限を配列の中に混在させることもできますが、分岐する権限が曖昧になる可能性があるので、どちらかに統一するといいでしょう
特定の権限を持つか持たないかで切り分けるコード例
大抵は前項の「current_user_can()」を使えば事足りますが、権限に限定した条件分岐の場合は以下のコードを使うこともできます。
// ユーザーオブジェクトの取得
$user = new WP_User($user_id);
// 確認したい権限を配列で指定
$capabilities = array('custom_capability', 'edit_posts', 'delete_posts');
foreach ($capabilities as $cap) {
if ($user->has_cap($cap)) {
// 権限がある場合の処理
echo "ユーザーは {$cap} 権限を持っています。";
// ここに権限がある場合の処理を記述
} else {
// 権限がない場合の処理
echo "ユーザーは {$cap} 権限を持っていません。";
// ここに権限がない場合の処理を記述
}
}
権限グループの削除方法
以下が先ほど案内したコードで追加した「pwcn_custom_role」というスラグ(プログラム上の名前)を持つユーザーをすべて「subscriber(購読者)」へ変更した上で、「pwcn_custom_role」という権限グループを削除するコードです。
// 特定のロールを持つユーザーの権限を変更する関数
function pwcn_change_role_before_removal() {
// 'pwcn_custom_role' を持つすべてのユーザーを取得
$users = get_users(array('role' => 'pwcn_custom_role'));
foreach ($users as $user) {
// ユーザーのロールを 'subscriber' に変更
$user->set_role('subscriber');
}
// カスタムロールを削除
remove_role('pwcn_custom_role');
}
// アクションフックで実行
add_action('init', 'pwcn_change_role_before_removal');
権限グループを削除するだけなら「remove_role(‘pwcn_custom_role’);」の部分を残せば済みますが、そうすると、この権限グループに紐づくユーザーがどの権限グループにも割り当てられなくなり「権限なし」となってしまいますので、上記のように登録済の別の役割への変更と権限グループの削除は一緒に処理させた方がいいでしょう。
先ほど触れたように権限グループは削除しない限りサイト内で選択可能なままになりますから、不要な権限グループは削除するようにしましょう。
コメントを残す