独自の Role を定義する

昨日の続きです。デフォルトで 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 の編集が可能になり、またリンクやカテゴリの管理からは離れられます。

Leave a Reply