WP管理領域へのアクセスを管理者以外のすべてのユーザーに制限するにはどうすればよいですか?
このサイトのユーザーは、必要なすべての機能を実行する独自のプロファイルページを持っています。
そのため、管理者は、管理者以外のすべてのユーザーに対して立ち入り禁止にする必要があります。
どうやってするか?
WP管理領域へのアクセスを管理者以外のすべてのユーザーに制限するにはどうすればよいですか?
このサイトのユーザーは、必要なすべての機能を実行する独自のプロファイルページを持っています。
そのため、管理者は、管理者以外のすべてのユーザーに対して立ち入り禁止にする必要があります。
どうやってするか?
回答:
関数を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
は、「管理者」だけができることであり、それは真実でmanage_options
はなく、機能であり、管理者ロールから削除したり、他のユーザーロールに割り当てることができると言います。重要なことは、あなたが何をしたいのかを知り、最良の方法を選ぶことです。私の答えを見て、これを説明します。
manage_options
しmanage_network
。後者は、デフォルトの「サイト管理者」に対してもダッシュボードを無効にしますが、スーパー管理者(ネットワーク管理者)にはアクセスを許可します。
プラグインを記述してにフックすることができますadmin_init
。
コーデックスは実際にあなたが探している機能の例を示しています。
http://codex.wordpress.org/Plugin_API/Action_Reference/admin_init#Example:_Access_control
与えられた回答の一部はほとんどの状況で問題ありませんが、ユーザーの役割をチェックする回答はなく、機能をチェックし、役割を割り当てたり削除したりできるので、要求されたとおりに実行する保証はありません。そのため、正確な答えを出すには、機能ではなくユーザーロールをチェックする必要があります。
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();
}
}
Adminimizeプラグインを試してください。
あなたはそれでかなりうまくロックダウンできます。
htaccessファイルを使用してアクセスを設定することもできます
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);
'administrator'
機能ではありません。後方互換性を維持するためだけに機能します。'update_core'
または他の管理機能を確認してください。
これを試してみてください。エンドユーザーに直面してもエラーは発生しません。良い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;
}
}