web-dev-qa-db-ja.com

ユーザーリストの「ロールの変更」メニューからadmin AND editorを削除します。

私のfunctions.phpには、ユーザー一覧画面の "ロールの変更"ドロップダウンメニューからadminロールを削除して、ユーザーを一覧表示したりロールを管理したりできる編集者が他のユーザーを別のユーザーに変えられないように管理者以下のコードは完璧に動作します。

function isa_pre_user_query($user_search) {
$user = wp_get_current_user();
  if (!current_user_can('administrator')) { // Is Not Administrator - Remove Administrator
    global $wpdb;

$user_search->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%')",
        $user_search->query_where
    );
  }
}
add_action('pre_user_query','isa_pre_user_query');

さて、私の質問は、編集者ロールをドロップダウンから削除して、編集者が他の編集者を作成できないようにする方法を教えてください。ドロップダウンメニューから管理者と編集者の両方の役割を削除し、役割の選択を作成者、寄稿者、および購読者のみに制限します。

何か案は?

3
Ismael Latorre

以下のコードを使用して、ドロップダウンから管理者とエディタのオプションを削除してください。 editable_rolesフィルタを使う

function wdm_user_role_dropdown($all_roles) {

    global $pagenow;

    if( current_user_can('editor') && $pagenow == 'user-edit.php' ) {
        // if current user is editor AND current page is edit user page
        unset($all_roles['administrator']);
        unset($all_roles['editor']);
    }

    return $all_roles;
}
add_filter('editable_roles','wdm_user_role_dropdown');
6
WisdmLabs