CG
(@du-bist-der-lenz)
BとCは同じ事ができるのだから、20人であっても同一であり、例外として①+②+③の権限を持たない、ユーザを設定したい。ということでしょうか。
CG様ありがとうございます。
はい、管理者の権限の中で例外として①+②+③の権限を持たない例外管理者を設定したいのです。
編集者ですと権限が足りないので、管理者から削るのが良いのだろうか。。。と思ったりしております。
どうぞよろしくお願いいたします。
CG
(@du-bist-der-lenz)
管理者権限から削るのと、編集者に追加したい事を、考えあわせておいたほうがやりやすいと思います。
詳しくお話をうかがえ、必要な機能について絞ることができれば他に解決方法がいろいろでてくるのではないかなと思うのですが
現時点では子サイトにわける、または独自に管理体系と管理ページを用意することになるのではないでしょうか。
まず管理するにあたって、だれが作成したか、は追える形でしょうか。記事については作成者のお名前があるかと思いますが
そのユーザーおよびユーザー一覧におけるユーザーは、そのユーザーを作成した作成者がだれなのか、どこかでみえる形にデータが存在していますか。
独自に作成されたプロパティや、既存で関係性を持たない連結をご利用の場合は、ユーザーロールの設定のみではむつかしのではないかなと思いました。
CG様
ありがとうございます。
A管理者の権限の中で例外として①+②+③の権限を持たない例外管理者を設定する
①ダッシュボードにてAは自分の作ったユーザーしかダッシュボード上で見えない、
固定ページ
②自分が作成した固定ページしか表示されないまたは編集不可
ウィジェット
③自分がウィジェットのパーツしか表示されないまたは編集不可
B編集者から特定の固定ページ以外を触れなくする
特定のウィジェットを触れるようにする
投稿ユーザー及び購読者のみ追加できるようにする
まとめるとAとBになりますでしょうか。
よろしくお願いいたします。
CG
(@du-bist-der-lenz)
ダッシュボードに入っても、権限のない部分は表示されない、あるいは表示されても編集できないことが承知であれば、管理者権限からマイナスするか、編集者権限で追加するかというところでしょう。
①は「edit_users」
②は「edit_pages」
③は「edit_theme_options」
ユーザーロールの設定のみで完結するのかどうか、その特殊なユーザーグループが何割かを占めるのか。先々、追加や変更が必要になることはないのか。
子サイトを、その特殊なユーザーに振り分け、特権管理者が監督するのがスマートだと、現時点での条件と情報からは思われます。
状況を認識するには、具体的な運用事情が分かりません。
例えばであれば、①は「edit_users」、②は「edit_pages」、③は「edit_theme_options」を設定して試験検証しましょう。
「グループやIDで非表示はわかるのですが、特定のページなどやユーザー一覧などどのように実現したものか悩んでおります。」ということだと、いくつかの腹案がありませんか。
CG様
ありがとうございます。
少しお時間が必要そうです。
一旦お礼のみ失礼いたします。
CG様
貴重なお時間を頂きまして本当に本当に感謝しております。
こんにちは
クローズされたようですが、どうやったら実現できるのか試しに書いてみたコードです。
「サブ管理者」ロールを割り当てた管理者には、
①自分が登録したユーザしかユーザ一覧に表示されません。
②自分が作成した固定ページしか編集のリンクが表示されません。
ウィジットについてはそこまでたどり着きませんでした。
ページを編集したりするURLを直接叩かれたら編集できてしまいそうなので、別のチェックを必要そうですが、参考までにソースをのせておきます。
define( 'SUB_ADMIN_ROLE', 'sub_admin' );
define( 'SUB_ADMIN_META', 'registered_by' );
/**
* サブ管理者ロールを追加する
*/
function my_init_add_role() {
if ( ! get_role( SUB_ADMIN_ROLE ) ) {
$admin = get_role( 'administrator' );
add_role( SUB_ADMIN_ROLE, 'サブ管理者', $admin->capabilities );
}
}
add_action( 'init', 'my_init_add_role' );
/**
* ユーザーメタに登録者IDを追加する
*/
function my_registration_save( $user_id ) {
$user = wp_get_current_user();
add_user_meta( $user_id, SUB_ADMIN_META, $user->ID );
}
add_action( 'user_register', 'my_registration_save', 10, 1 );
/**
* サブ管理者ロールがある場合、管理画面のユーザ一覧に、
* 自身が登録したユーザのみ表示する
*/
function my_users_list_table_query_args( $args ) {
$user = wp_get_current_user();
$args['meta_query'] = array(
'relation' => 'AND',
array(
'key' => SUB_ADMIN_META,
'value' => $user->ID
)
);
return $args;
}
add_filter( 'users_list_table_query_args', 'my_users_list_table_query_args' );
/**
* サブ管理者ロールがある場合、管理画面の固定ページ一覧に、
* 自身が登録したページのみに編集リンクを表示する
*/
function my_page_row_actions( $actions, $post ) {
$user = wp_get_current_user();
$author = get_user_by( 'id', $post->post_author );
if ( in_array( SUB_ADMIN_ROLE, (array) $user->roles )
&& $user->ID !== $author->ID
) {
unset( $actions['edit'] );
unset( $actions['inline hide-if-no-js'] );
unset( $actions['trash'] );
}
return $actions;
}
add_filter( 'page_row_actions', 'my_page_row_actions', 10, 2 );