web-dev-qa-db-ja.com

ダッシュボードへのアクセスを管理者だけに制限するにはどうすればいいですか?

WP管理領域へのアクセスを管理者以外のすべてのユーザーにどのように制限するのでしょうか。
当サイトのユーザーは自分が必要とするすべての機能を実行する自分のプロフィールページを持っています。

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

どうやってするか?

19
Robin I Knight

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

このコードを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()をリンクに置き換えます。

19
shea

与えられた答えの中にはほとんどの状況で大丈夫なものもありますが、どれもユーザーロールをチェックしたり、機能をチェックしたり、ロールをフォームから割り当てたりすることができないためです。したがって、正確に答えるためには、機能ではなくユーザーロールをチェックする必要があります。

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();
      }

 }
9
cybmeta

プラグインを書いてadmin_initにフックすることができます。

コーデックスは実際にあなたが探している機能の例を示しています。

http://codex.wordpress.org/Plugin_API/Action_Reference/admin_init#Example:_Access_control

9
Wietse Venema

Adminimize プラグインを試してください。
あなたはそれで物事をかなりうまく封鎖することができます。

Htaccessファイルを介してaccess = を設定することもできます

3
goofydg1
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);
2
Gabi

これを試してください。エンドユーザーの前では絶対にエラーを避けてください。良いUXに対して。このコードはそれらをHomeにリダイレクトします。

    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;
}
}
0
Ahmad Awais

これらの行をあなたの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 );
0
Junaid Munir