2015-01-08 4 views
1

내 프런트 엔드에서 wp_ajax_nopriv이 작동하지 않습니다. 사용자가 로그인하면 ajax가 정상적으로 작동하지만 반대 시나리오 인 경우 user/admin이 로그 아웃되고, 페이지가 기본 홈 페이지로 리디렉션되고 로그인되지 않은 사용자의 경우 ajax가 작동하지 않습니다. 내 문제를 해결하고 두 시나리오에서 동일한 아약스에 액세스하는 방법. 현재 wordpress 4.0을 사용 중입니다. 모든 시나리오에서 작동하도록 아약스를 제한 할 수있는 방법이 있습니까?wp_ajax_nopriv 작동하지 않습니다 wordpress

내 코드 : 필터가 wp-admin 영역에 접근하는 관리자가 아닌 사용자를 방지하는 데 사용되는 같은

add_action('wp_ajax_Test_SO', 'Test_SO'); 
add_action('wp_ajax_nopriv_Test_SO', 'Test_SO'); 

function Test_SO() 
{ 
$a = array('1','2','3'); 
     wp_send_json_success($a); 
} 

답변

3

는 홈페이지에 리디렉션 있다면, 그것은 소리. ...

function filterNonAdmins() { 
    if (!current_user_can('manage_options')) { 
     wp_redirect(home_url()); 
     exit; 
    } 
} 

add_action('admin_init', 'filterNonAdmins'); 

그것은 또한 AJAX 호출 필터 때문에 이것은 나쁜이다 : 이런 식으로 뭔가 일반적으로 플러그인 또는 functions.php 파일에서 매우 일반적입니다.

당신이 필요로하는 것은이 더 가깝다 뭔가 :

이가 먼저 AJAX 호출이 있는지 여부를 확인
function filterNonAdmins() { 
    if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) !== 'xmlhttprequest') { 
     if (!current_user_can('manage_options')) { 
      wp_redirect(home_url()); 
      exit; 
     } 
    } 
} 

add_action('admin_init', 'filterNonAdmins'); 

; 이면 사용자/호출이 리디렉션되지 않습니다.

+0

또는 단순히 앞에 추가 역할 \ (정의 ('DOING_AJAX') && DOING_AJAX) 경우 {반환'와 기능 검사; }'로그인하지 않은 사용자에 대한 ajax 차단을 방지합니다. –

관련 문제