自己解決です。
ピンポイントなものがありました。
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
ありがとうございます!
pre_user_query よりも、users_list_table_query_args のほうがベターかなと思いますので、参考にさせていただきます!