ダッシュボードへのアクセスを管理者のみに制限する方法は?


19

WP管理領域へのアクセスを管理者以外のすべてのユーザーに制限するにはどうすればよいですか?
このサイトのユーザーは、必要なすべての機能を実行する独自のプロファイルページを持っています。

そのため、管理者は、管理者以外のすべてのユーザーに対して立ち入り禁止にする必要があります。

どうやってするか?


yourdomain.com/wp-adminにあるものにアクセスする必要のない「前向き」のユーザーページがあるということですか?
-curtismchale

はい、正確に。それに何か問題がありますか?
ロビンIナイト

いいえ、明確にしています。
-curtismchale

回答:


19

関数をadmin_init使用してcurrent_user_can()、現在のユーザーができるかどうかを確認することにより、アクションにフックし、ユーザーが管理者であるかどうかを確認manage_optionsできます。

functions.phpファイルに貼り付けたこのコードは、非管理者がダッシュボードにアクセスしようとするとメッセージを表示します。

function wpse_11244_restrict_admin() {

    if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
        return;
    }

    if ( ! current_user_can( 'manage_options' ) ) {
        wp_die( __( 'You are not allowed to access this part of the site' ) );
    }
}

add_action( 'admin_init', 'wpse_11244_restrict_admin', 1 );

必要に応じて、代わりにユーザーをホームページにリダイレクトすることで、より優れたユーザーエクスペリエンスを提供できます。

function wpse_11244_restrict_admin() {

    if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
        return;
    }

    if ( ! current_user_can( 'manage_options' ) ) {
        wp_redirect( home_url() );
        exit;
    }
}

add_action( 'admin_init', 'wpse_11244_restrict_admin', 1 );

ユーザーをプロファイルページにリダイレクトする場合home_url()は、上記のコードのリンクを置き換えます。


この回答は、質問の要件を満たしていません。まず、「manage_options」機能を持つユーザーへの管理領域へのアクセスを無効にし、管理者だけでなく複数の役割に機能を割り当てることができます。さらに、「manage_options」機能を管理者から削除できます。
サイブメタ

機能の@cybmetaチェックは、manage_options管理ユーザーのチェックに受け入れられる方法です。でも、マーク・ジャクィスはそう言う
シア

質問者は、管理者ユーザーの役割を確認するように正確に要求しました。私は彼に正確な答えを与え、いつ、なぜ機能の確認が改善できるかを説明することが重要だと思います。あなたmanage_optionsは、「管理者」だけができることであり、それは真実でmanage_optionsはなく、機能であり、管理者ロールから削除したり、他のユーザーロールに割り当てることができると言います。重要なことは、あなたが何をしたいのかを知り、最良の方法を選ぶことです。私の答えを見て、これを説明します。
サイブメタ14年

先生、+ 1を獲得してください!:)これを何時間も探していました!また、小さな改善。単一サイトで十分です。マルチサイトのためには、交換したいと思いますmanage_optionsmanage_network。後者は、デフォルトの「サイト管理者」に対してもダッシュボードを無効にしますが、スーパー管理者(ネットワーク管理者)にはアクセスを許可します。
rkeet 14

この答えの主な問題は、ajax呼び出しと衝突することです。@cybmetaには以下の正解があります。
RiotAct


9

与えられた回答の一部はほとんどの状況で問題ありませんが、ユーザーの役割をチェックする回答はなく、機能をチェックし、役割を割り当てたり削除したりできるので、要求されたとおりに実行する保証はありません。そのため、正確な答えを出すには、機能ではなくユーザーロールをチェックする必要があります。

add_action( 'admin_init', 'allow_admin_area_to_admins_only');
function allow_admin_area_to_admins_only() {

      if( defined('DOING_AJAX') && DOING_AJAX ) {
            //Allow ajax calls
            return;
      }

      $user = wp_get_current_user();

      if( empty( $user ) || !in_array( "administrator", (array) $user->roles ) ) {
           //Redirect to main page if no user or if the user has no "administrator" role assigned
           wp_redirect( get_site_url( ) );
           exit();
      }

 }

ユーザーに「manage_options」機能があることを確認したい場合は、できます。実際、ほとんどの場合、これが最良のオプションです。この機能はデフォルトで管理者ユーザーに関連付けられていますが、管理者ロールから削除したり、他のユーザーロールに割り当てることができます。そのため、ほとんどの場合、ユーザーができることまたはできないことを確認する方が、ユーザーの役割を確認するよりも優れています。そのため、ほとんどの場合、機能のチェックが選択された方法である必要がありますが、この概念を明確にし、状況と目的に最適なオプションを選択する必要があります。

add_action( 'admin_init', 'admin_area_for_manage_options_only');
function admin_area_for_manage_options_only() {

      if( defined('DOING_AJAX') && DOING_AJAX ) {
            //Allow ajax calls
            return;
      }


      if( ! current_user_can( "manage_options" ) ) {
           //Redirect to main page if the user has no "manage_options" capability
           wp_redirect( get_site_url( ) );
           exit();
      }

 }

これは正解です。ajax呼び出しと衝突しません。
RiotAct

3

Adminimizeプラグインを試してください。
あなたはそれでかなりうまくロックダウンできます。

htaccessファイルを使用しアクセスを設定することもできます


1
管理のための+1。それはプラグインのです。いくつかのカスタムロールマネージャープラグインと相まって、それは単に揺れ動きます。(私が個人的な意見を許せば) ::::最後の注意として:リンクだけではなく、より多くの情報を提供してください、それは答えをより完全にします。
ブラソフィロ

2
function wpse_11244_restrict_admin() {
    if (!current_user_can('update_core')) {
        wp_die(__('You are not allowed to access this part of the site'));
    }
}

add_action('admin_init', 'wpse_11244_restrict_admin', 1);

4
'administrator'機能ではありません。後方互換性を維持するためだけに機能します。'update_core'または他の管理機能を確認してください。
FUXIA

また、機能をロールに割り当てることができるため、「管理者」ユーザーへのアクセスを許可する場合は、機能ではなくロールを確認する必要があります。
サイブメタ14年

0

これらの行を functions.php

function baw_no_admin_access()
{
 if( !current_user_can( 'administrator' ) ) {
     wp_redirect( home_url() );
     die();
  }
}
add_action( 'admin_init', 'baw_no_admin_access', 1 );

3
@toschoが言ったように、「管理者」は機能ではなく、代わりに「update_core」のような管理機能を使用する
Pierre

0

これを試してみてください。エンドユーザーに直面してもエラーは発生しません。良いUXに対して。このコードは、それらをホームにリダイレクトします。

    add_action( 'init', 'blockusers_init' );
function blockusers_init() {
if ( is_admin() && ! current_user_can( 'administrator' ) &&
! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
wp_redirect( home_url() );
exit;
}
}

-1

私はWPフロントエンドを使用し、管理者を期待するすべての人に設定します。


その後、リンクをより多くの情報を提供してください-それは答えがより完全になり
シア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.