私はプラグインのフロントエンドユーザーを使ってみましたが、フロントエンドページへのアクセスを妨げるのでこれは何かと衝突します。そのため、2つのユーザー名(またはロール)のどちらでもないユーザーがwp-adminにアクセスできないように手動で設定する必要があります。
これは基本的に単なるユーザー機能チェックであり、その後に出口呼び出しでのリダイレクトが続きます。その後、リクエストの送信元のサイトにリダイレクトします。
<?php
! defined( 'ABSPATH' ) AND exit;
/* Plugin Name: (#66093) »kaiser« Deny Admin-UI access for certain roles */
function wpse66093_no_admin_access()
{
$redirect = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : home_url( '/' );
if (
current_user_can( 'USER_ROLE_NAME_HERE' )
OR current_user_can( '2ND_ROLE_NAME_HERE' )
)
exit( wp_redirect( $redirect ) );
}
add_action( 'admin_init', 'wpse66093_no_admin_access', 100 );
承認された回答は ユーザーロール と述べていますが、実際には ユーザー機能についての機能を使用しています
これが ユーザーロールの解決策です
function wpse66094_no_admin_access() {
$redirect = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : home_url( '/' );
global $current_user;
$user_roles = $current_user->roles;
$user_role = array_shift($user_roles);
if($user_role === 'YOUR_USER_ROLE_HERE'){
exit( wp_redirect( $redirect ) );
}
}
add_action( 'admin_init', 'wpse66094_no_admin_access', 100 );
@kaiserによって提供された回答に基づいて(ありがとうところで)、これは私の作業コードです。それはfunctions.php
ファイルに置かれます。
使用される条件は、ユーザー が manage_options
またはedit_posts
を使用できない場合です。
function wpse66093_no_admin_access() {
$redirect = home_url( '/' );
if ( ! ( current_user_can( 'manage_options' ) || current_user_can( 'edit_posts' ) ) )
exit( wp_redirect( $redirect ) );
}
add_action( 'admin_init', 'wpse66093_no_admin_access', 100 );
@ kaiserの答えで、私はadmin_initの上にadmin_menuフックを利用する必要があることを発見しました。そうしないと、ユーザーが「読み取り」アクセス権を持っていない場合は、user_can_access_admin_page()をチェックしてください。ダッシュボードには、「このページにアクセスするための十分な権限がありません」というメッセージが表示されます。リダイレクトされるのではなく、ページ。
ロールからread
機能を削除すると、ユーザーはダッシュボードにアクセスできなくなります。それらは以下のエラーを受け取ります。
この管理者ページにアクセスするための十分な権限がありません。
理由:現在のユーザには、「ダッシュボード」メニュー項目にアクセスするために必要な「読み取り」機能がありません。