昨日の続きです。デフォルトで Administrator、Editor、Author、Contributor、Subscriber の5種類の Role が定義されていると書きましたが、加えて独自の Role を定義することもできます。
Roles and Capabilities « WordPress Codex
例えば、WordPress を CMS として利用するユーザのために Role を設定したいとします。このユーザの仕事は Page の編集がメインで、それ以上のことにはあまり首を突っ込みたくありません。
Author に近いですが、Author には Page を編集できる edit_pages の Capability がありません。とはいえ Editor のように、リンクやカテゴリの管理ができるほどの権限は余計です。帯に短し襷に長し、の状態なので、Author と Editor の中間的な Role として “CMS User” を独自に定義したいと思います。
まず Role の定義を追加するために add_role() を使います。
add_role(‘cms_user’, __(‘CMS User’));
1番目の引数が Role の名前、2番目が表示のための名前です。
その後で、この cms_user に必要な Capability を追加します。
$role = get_role(‘cms_user’);
$role->add_cap(‘upload_files’);
$role->add_cap(‘edit_posts’);
$role->add_cap(‘edit_published_posts’);
$role->add_cap(‘publish_posts’);
$role->add_cap(‘edit_pages’);
$role->add_cap(‘read’);
$role->add_cap(‘level_2′);
$role->add_cap(‘level_1′);
$role->add_cap(‘level_0′);
Author の持つ Capability に edit_pages を付け足しました。
デフォルトで定義されている30種類の Capability 以外でも、独自に Capability を設定して Role に追加することも可能です。例えば
$role->add_cap(‘foo_bar’);
のようにテキトーな Capability を追加しておいて、
if (current_user_can(‘foo_bar’)) {
…
}
のように使って制御するわけです。
この辺の API はみんな wp-includes/capabilities.php で定義されているので詳細はこちらを。
Role 定義の設定はそれ用にプラグインを用意して、その中で設定するのがいいと思います(cms_user を定義するプラグイン)。
Role を追加したら、さきほどの CMS ユーザに割り当ててやります。
これでこのユーザは Page の編集が可能になり、またリンクやカテゴリの管理からは離れられます。
