2017-07-06 9 views
0

だから、私はユーザーにwordpressダッシュボードにアクセスする機能を拒否したいと思います。しかし、ユーザー間でメッセージを送信するためにAJAXを使用するフロントエンドPMをユーザーが使用できるようにしたい。WordPress:ユーザーがダッシュボードへのアクセスを拒否していますが、AJAXリクエストを許可していますか?

どのようにPMを許可できますが、ダッシュボードへのすべてのアクセスを拒否できますか?

古典の​​functions.phpのアプローチ:

add_action('init', 'my_custom_dashboard_access_handler'); 

function my_custom_dashboard_access_handler() { 

    // Check if the current page is an admin page 
    // && and ensure that this is not an ajax call 
    if (is_admin() && !(defined('DOING_AJAX') && DOING_AJAX)){ 

     //Get all capabilities of the current user 
     $user = get_userdata(get_current_user_id()); 
     $caps = (is_object($user)) ? array_keys($user->allcaps) : array(); 

     //All capabilities/roles listed here are not able to see the dashboard 
     $block_access_to = array('subscriber', 'contributor', 'my-custom-role', 'my-custom-capability'); 

     if(array_intersect($block_access_to, $caps)) { 
     wp_redirect(home_url()); 
     exit; 
     } 
    } 
} 

残念ながら、これは... AJAXから思考をリダイレクトしますか?

ユーザーロールエディタを使用すると、ユーザーはダッシュボードにアクセスできますか?

基本的には、管理者がAJAXを制限せずにダッシュボードにアクセスできるようにします。

答えて

0

を使用でき

function sm_restrict_admin_with_redirect() { 

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

add_action('admin_init', 'sm_restrict_admin_with_redirect', 1); 
関連する問題