サポート » 使い方全般 » users.phpにて、自分の権限以上のユーザーを非表示にする方法

  • 解決済 doragonmaster

    (@doragonmaster)


    初めて投稿させていただきます。

    タイトルの通りなのですが、users.phpにて自分の権限以上のレベルのユーザーを非表示にする方法を検討しています。

    具体的には、
    ・管理者(デフォルトLV10)
    ・WEBマスター(LV9)
    ・一般ユーザー(LV1)
    という形です。

    WEBマスターには、ユーザー管理の権限を与えたいが、管理者を削除されては困るので、WEBマスター以下は管理者ユーザーを見れないようにしようと考えております。
    manage_users_columnsにてカラムを追加するように、特定の権限の行を非表示に出来るか、もしくは一覧での呼び出しで特定の権限を除外できれば良いかなと思っているのですが、具体的な方法が見つかりません。
    難しければ、ユーザー一覧ページを管理画面内に別に作ろうと考えております。

    ご教授いただければ幸いです。
    どうぞよろしくお願いいたします。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック投稿者 doragonmaster

    (@doragonmaster)

    自己解決です。
    ピンポイントなものがありました。
    https://rudrastyh.com/wordpress/pre_user_query.html

    add_action('pre_user_query','rudr_hide_all_administrators');
     
    function rudr_hide_all_administrators( $u_query ) {
     
    	// let's do the trick only for non-administrators
    	$current_user = wp_get_current_user();
    	if ( $current_user->roles[0] != 'administrator' ) { 
    		global $wpdb;
    		$u_query->query_where = str_replace(
    			'WHERE 1=1', 
    			"WHERE 1=1 AND {$wpdb->users}.ID IN (
    				SELECT {$wpdb->usermeta}.user_id FROM $wpdb->usermeta 
    					WHERE {$wpdb->usermeta}.meta_key = '{$wpdb->prefix}capabilities'
    					AND {$wpdb->usermeta}.meta_value NOT LIKE '%administrator%')", 
    			$u_query->query_where
    		);
    	}
    }

    解決なさったので今更ですが、ご参考まで。

    WordPress 4.7.4 の管理画面の「ユーザー一覧」は
    /wp-admin/includes/class-wp-users-list-table.php を使っており
    その中にフィルターフック users_list_table_query_args が用意されています。

    pre_user_query も良いと思いますが、ユーザーレベルを扱うなら、ということで。

    function my_hide_users_by_level( $args ) {
      // 管理者(administrator)ではない場合のみ
      $current_user = wp_get_current_user();
      if ( 'administrator' != $current_user->roles[0] ) { 
        global $wpdb;
        $blog_id = get_current_blog_id();
        $level_query = array(
          'key' => $wpdb->get_blog_prefix( $blog_id ) . 'user_level',
          'value' => 10,	// レベル10未満に限る
          'compare' => '<',
          'type' => 'NUMERIC',
        );
        $args['meta_query'] = array( $level_query );
      }
      return $args;
    }
    add_filter( 'users_list_table_query_args', 'my_hide_users_by_level' );
    

    しかしユーザーレベルは WordPress 3.0 から非推奨になったので
    @doragonmaster さんの方法が正攻法なのかも。

    Home

    Home

    トピック投稿者 doragonmaster

    (@doragonmaster)

    ありがとうございます!
    pre_user_query よりも、users_list_table_query_args のほうがベターかなと思いますので、参考にさせていただきます!

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「users.phpにて、自分の権限以上のユーザーを非表示にする方法」には新たに返信することはできません。