wordpress 過去記事

[WordPress]権限を最初から追加または変更してしまう方法

WordPressのデフォルトの権限に
・管理者
・編集者
・投稿者
・寄稿者
・購読者
とあります

一人で運用する際にはすべて管理者権限でOKなのですが、複数人で管理するにあたって権限管理をしたケースが良く発生します
良くあるのが、投稿者権限で記事の投稿はさせたいけど、削除させたくないとかいう時とか

考えることは誰も同じで「RoleManager」とか便利なプラグインがあるので、それを利用すると良いです

以上で、今回は終わり...

ではなく、RoleManagerでもカバーできない所があります

それはマルチサイトの場合

マルチサイトでもプラグインは正常に動作しますが、問題は各サイト毎にだけ設定が反映される事
1つ目のサイトで先ほどの投稿者の記事の削除権限をなくしても、2つ目のサイトの投稿者の権限はそのまま

つまりマルチサイトが10サイトあれば、同じ変更を10回行わなくてはいけない
結構面倒な上にミスしても分かりにくいところだから困ります

という事で、マルチサイトでも気にせず、"最初から"権限を変更してしまう方法を紹介します
ただし、これもデメリットがありまして、"最初から"と言ったのは訳があります

最初から・・・つまりインストールの段階でという事です
WordPressはインストールの段階で権限グループと、各権限設定を行っています。ここを変更してしまうわけです
何を言っているかって?インストールの段階にしかできない手法なんです
今運用中のサイトには変更が利かせませんので、あしからず

/wp-admin/includes/schema.phpを開きます

これは3.3のschema.phpファイルのものですが
[php]
function populate_roles() {
populate_roles_160();
populate_roles_210();
populate_roles_230();
populate_roles_250();
populate_roles_260();
populate_roles_270();
populate_roles_280();
populate_roles_300();
}
[/php]
"populate_roles"でソース内検索すると、上記の様なコードが見つかります
これが各Verで権限の辺りを変更してきたところですが

[php]
function populate_roles_160() {
// Add roles

// Dummy gettext calls to get strings in the catalog.
/* translators: user role */
_x('Administrator', 'User role');
/* translators: user role */
_x('Editor', 'User role');
/* translators: user role */
_x('Author', 'User role');
/* translators: user role */
_x('Contributor', 'User role');
/* translators: user role */
_x('Subscriber', 'User role');

add_role('administrator', 'Administrator');
add_role('editor', 'Editor');
add_role('author', 'Author');
add_role('contributor', 'Contributor');
add_role('subscriber', 'Subscriber');

// Add caps for Administrator role
$role =& get_role('administrator');
$role->add_cap('switch_themes');
$role->add_cap('edit_themes');
[/php]

populate_roles_160()を見ていくと、
[php]
_x('Administrator', 'User role');
add_role('administrator', 'Administrator');
[/php]
はユーザーロールにAdministratorグループをadd_roleで追加しています
例えば、guestなどを作りたい場合は
[php]
_x('Guest', 'User role');
add_role('guest', 'Guest');
[/php]
とすればいいでしょう
(大文字小文字は他のものと合わせた方が改造もし易いです)

[php]
// Add caps for Administrator role
$role =& get_role('administrator');
$role->add_cap('switch_themes');
$role->add_cap('edit_themes');
$role->add_cap('activate_plugins');
$role->add_cap('edit_plugins');
$role->add_cap('edit_users');
$role->add_cap('edit_files');
[/php]
ここはadd_capを使って、administratorロールに使用可能な機能を追加しています
switch_themesやedit_usersの意味はなんとなく分かりますが、詳しくはココか本家(英文)をみてください

同じ様にguestロールに設定するには
[php]
// Add caps for Guest role
$role =& get_role('guest');
$role->add_cap('read');
$role->add_cap('read_private_pages');
$role->add_cap('read_private_posts');
[/php]
等と設定します
上記例だと、固定ページおよび投稿をReadOnlyでアクセスできるってところですね
readは管理者パネルにアクセスする権限の様ですので、ある意味必須です

上記以外に既存のロール、例えば先に述べた投稿者の削除権限を削除するのは、
[php]
$role->add_cap('delete_pages');
$role->add_cap('delete_others_pages');
$role->add_cap('delete_published_pages');
$role->add_cap('delete_posts');
$role->add_cap('delete_others_posts');
$role->add_cap('delete_published_posts');
$role->add_cap('delete_private_posts');
[/php]
をコメントアウトしてしまえば良いでしょう

話は長くなりましたが
これを保存して、アップしてインストールすればこの設定のまま権限グループが設定されます
もちろんマルチサイトでもそのままです

後はguestの様に追加したロールはもちろん日本語訳されないのでguestとそのまま表示されます
日本語版や他言語版を使っていて表示名を変えたい場合は言語ファイルをいじる必要がありますが、需要があれば追記します

-wordpress, 過去記事
-, , ,

© 2024 shimashima.com