2012-02-23 4 views
5

admin-ajax.php에 대한 일부 아약스 호출을 만들기 위해 플러그인을 사용자 정의했으며 훌륭하게 작동합니다. 내가 다른 사이트를 통해 코드를 복사하여 더 이상 로그인하지 않은 사용자를 위해 작동 불을 지르고에서Wordpress admin-ajax가 302 리디렉션 오류를 발생합니다.

:.

POST http://<subdomain>.<server>/wp-admin/admin-ajax.php 302 Moved Temporarily 1.08s  

GET http://<subdomain>.<server>/ 200 OK 

편집 : 문제는 테마가 가능하게 리디렉션 할 수있는 것입니다 아약스 요청. 플러그인은 두 개의 후크가 : 그들은 모두 대부분의 사이트에서 잘 작동

add_action('wp_ajax_em_ajax_getEvents', 'em_ajax_getEvents'); // ajax for logged in users 
add_action('wp_ajax_nopriv_em_ajax_getEvents', 'em_ajax_getEvents'); // ajax for not logged in users 

을하지만, 하나 개의 주제는 어떻게 든 로그인 한 사용자 이외의 요청을 리디렉션합니다. 이러한 작업은 플러그인에 고유하므로 어디서부터 시작해야 할지를 놓치고 있습니다.

해결 방법 : add_action('init' 솔루션 Ronald Huereca- 큰 덕분에, 잘못된 리디렉션 관리자 영역을 보호하기위한 시도에서 후킹 된 곳 '정확히 있음. 이제는 테마의 관리 영역을 손상시키지 않고 사용자가 익명의 아약스 요청을 할 수 없게하는 다른 플러그인을 저지하지 않는 안전한 수정을 찾아야합니다.

// stop users accessing the admin 
add_action('init', array($this, 'prevent_admin_access'), 0); 

function prevent_admin_access() {  

    if (strpos(strtolower($_SERVER['REQUEST_URI']), '/wp-admin') !== false) { 
     $current_user = wp_get_current_user(); 

     if(!user_can($current_user->ID, 'administrator') && (!user_can($current_user->ID, 'contributor'))){ 
      wp_redirect(get_option('siteurl')); 
     } 
    } 
} 
+0

문제는 문제에 관해서 아무 말도하지 않습니다. 정교한. – ThinkingMonkey

+0

죄송합니다. 문제는 단지 ajax 요청을 admin-ajax로 리디렉션 할 수 있는지 전혀 모르는 것입니다.PHP는 액션이 ​​내 자신이고, 잘 작동하므로 리다이렉트를 유발할 수있는 곳은 어디일까요? – Sinetheta

+0

제발 무시해주세요 (코멘트를 삭제하지 마십시오; ( –

답변

10

비슷한 주제가 있습니다. 원래 코더는 관리자가 아닌 사용자가/wp-admin/area를 볼 수 없도록 막으려했습니다.

// Block Access to /wp-admin for non admins. 
function custom_blockusers_init() { 
    if (is_user_logged_in() && is_admin() && !current_user_can('administrator')) { 
    wp_redirect(home_url()); 
    exit; 
    } 
} 
add_action('init', 'custom_blockusers_init'); // Hook into 'init' 

나는 내가 가지고있는 것과 유사한 소스 코드에 대한 테마를 확인합니다 :

다음은 예입니다.

코드를 찾았 으면 DOING_AJAX 상수가 정의 된 경우 사용자가 리디렉션되지 않도록 추가 조건부를 추가하기 만하면됩니다.

+0

) 머리에 손톱이 부딪혔을 때, 정확하게 사용 된 후크 였고, 세부 사항을 제 질문에 포함 시켰습니다. 이제는 그것을 해제하는 안전한 방법에 대해 생각해 봐야합니다. 테마의 관리 영역을 손상시키지 않고 ... – Sinetheta

0

변화 상태

!user_can($current_user->ID, 'administrator') && (!user_can($current_user->ID, 'contributor')) && !is_ajax() 

0

!is_ajax() 내가 똑같은 문제를 가지고 추가하고이 나를 위해 일한 :

function mt_redirect_admin() { 

if (! current_user_can('manage_options') && (! defined('DOING_AJAX') || ! DOING_AJAX)) { 
wp_redirect(site_url()); 
exit; 
} 
} 

add_action('admin_init', 'mt_redirect_admin', 1); 
3

을 나는이 여전히 오래된 질문 알고하지만 당신은 할 수 봐라.

는 빠르게 IF 설정 설명 ON 관심이 코드를 수행 할 수 있습니다

function redirect_non_admin_user(){ 
    if (!defined('DOING_AJAX') && !current_user_can('administrator')){ 
     wp_redirect(site_url()); exit; 
    } 
} 


add_action('admin_init', 'redirect_non_admin_user'); 

설명 : 이 문제에 대한 이유 중 하나 설치된 플러그인 중 일부는 홈페이지에 비 관리자 사용자 또는 모든 페이지 리디렉션이다 그들은 http://localhost/project/wp-admin과 같은 wp-admin에 액세스하려고합니다. 그래서 이것은 문제를 야기합니다.

관리자가 아닌 관리자를 리디렉션 할 때 다음 코드를 사용할 수 있습니다.이 기능은 프론트 엔드의 admin ajax 호출에서도 작동합니다.

관련 문제