他のユーザーがユーザーリストに管理者を表示する機能を削除しますか?


15

モデレーターのメモ:元のタイトルは「ユーザーメニューから管理者を削除」でした)

基本的にユーザーを追加/削除できる編集者であるクライアント管理者ロールを作成しました。記事Editorは、管理者以外の任意の新規ユーザーを作成することができますが、」真の管理者ユーザーの編集や作成から私の新しいクライアント管理者の役割を維持するうえで優れていました。

しかし、理想的なのは、ユーザーを表示しているときに管理者をクライアント管理者から隠すことです。私は彼らが彼らのサイトの管理者であると「信じて」ほしいが、私が彼らが私の役割/ユーザーさえ見ることができるようにしたくない- 彼らが「ユーザー」にいるとき彼らから「管理者」の役割を本質的に隠すパネル。

回答:


10

こんにちは@カルロス:

テーマのfunctions.phpファイル、または作成している.php可能性のあるプラグイン内のファイル(WordPress 3.1.xで機能します)に以下を追加してみてください

add_action('pre_user_query','yoursite_pre_user_query');
function yoursite_pre_user_query($user_search) {
  $user = wp_get_current_user();
  if ($user->ID!=1) { // Is not administrator, remove administrator
    global $wpdb;
    $user_search->query_where = str_replace('WHERE 1=1',
      "WHERE 1=1 AND {$wpdb->users}.ID<>1",$user_search->query_where);
  }
}

WordPress 3.0.xを使用している場合は、代わりにこれを試してください(WordPressは'pre_user_query'3.1までフックを追加しなかったため):

add_action('pre_user_search','yoursite_pre_user_search');
function yoursite_pre_user_search($user_search) {
  $user = wp_get_current_user();
  if ($user->ID!=1) { // Is not administrator, remove administrator
    global $wpdb;
    $user_search->query_where = str_replace('WHERE 1=1',
      "WHERE 1=1 AND {$wpdb->users}.ID<>1",$user_search->query_where);
  }
}

1
最初に追加されたユーザー(ほとんどの場合は管理者)のみが非表示になりますが、管理者のIDが1以外の場合、クエリを適切に変更する必要があります。また、すべての管理者ではなく、1人の管理者のみを非表示にします。
EAMann

実際には、これをバージョン3.1でのみ動作させることができました。古いバージョンで同じコードを使用しても、うまくいかないようです(3.04でも)。
カルロス

@EAMann-確かに、私は便利でした。誰かがもっと必要なら、私はそれを調べます。
MikeSchinkel

@Carlos-v3.0.xが必要ですか、それともv3.1で大丈夫ですか?
MikeSchinkel

@ Mike—すごい、はい、あなたが私を助けてくれるなら、それは素晴らしいことです。私は無駄にハッキングしてきました。私の目的では、管理者ID 1は問題なく機能します。ほんとうにありがとう。
カルロス

10

現在のユーザーが管理者の役割を持っているかどうかをチェックし、そうでない場合はサブスクライバーであるユーザーのみを選択するMikeSchinkelの答えのmodを次に示します。

add_action('pre_user_query','yoursite_pre_user_query');
function yoursite_pre_user_query($user_search) {
    $user = wp_get_current_user();

    if ( $user->roles[0] != '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}user_level' 
                    AND {$wpdb->usermeta}.meta_value = 0)", 
            $user_search->query_where
        );

    }
}

1
ちょうどFYIあなたは、管理者(編集者、執筆者、加入者など)が、依然として非表示管理者以外のすべてのユーザーを表示したい場合は、そのような自分自身のようにSQLで非常に堪能ではありません将来的に誰のために、あなたは、この行を変更することもできますAND {$wpdb->usermeta}.meta_value = 0し、代わりに、メタ値を<10のようにAND {$wpdb->usermeta}.meta_value < 10)します。これにより、レベルに関係なく、すべてのユーザーが表示され、すべてのユーザーからすべての管理者が非表示になります。
Howdy_McGee

2

ユーザーレベルは非推奨であるため、このメソッドは代わりに機能をチェックします。

/** Hide Administrator From User List **/
function isa_pre_user_query( $user_search ) {
    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' );

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.