source

Word press admin-ajax에서 오류 302 리다이렉트 발생

bestscript 2023. 3. 6. 21:13

Word press admin-ajax에서 오류 302 리다이렉트 발생

플러그인을 커스터마이즈하여 admin-ajax.php에 대한 ajax 호출을 몇 가지런히 동작합니다.다른 사이트에 코드를 복사했는데 로그인하지 않은 사용자에게는 더 이상 작동하지 않습니다.

fire bug에서:

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

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

edit: 문제는 테마가 Ajax 요청을 리다이렉트하기 위해 무엇을 할 수 있는가 하는 입니다.플러그인에는 다음 두 가지 후크가 있습니다.

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

대부분의 사이트에서는 둘 다 정상적으로 동작하지만 로그인하지 않은 사용자의 요청을 한 가지 테마로 리다이렉트할 수 있습니다.이러한 액션은 플러그인에 따라 다르기 때문에 어디서부터 찾아야 할지 막막합니다.

솔루션: Ronald Huereca가 델고객 서비스를add_action( 'init'문제의 리다이렉트가 행업하고 있는 장소로서 관리 영역을 보호하려고 하고 있습니다.이제 테마의 관리 영역을 손상시키지 않고 다른 플러그인이 익명의 Ajax 요청을 허용하는 데 방해가 되지 않는 안전한 수정 방법을 찾아야 합니다.

// 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'));
        }
    }
}

어떤 주제에서도 비슷한 일이 있었어요.원래 코더는 관리자가 아닌 사용자가 /wp-admin/ 영역을 볼 수 없도록 하려고 했습니다.

다음은 예를 제시하겠습니다.

// 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 상수가 정의되어 있는 경우 사용자가 리디렉션되지 않도록 조건을 추가합니다.

아직 오래된 질문인 건 알지만 한번 봐주세요.

설명에 관심이 없는 경우 코드를 신속하게 처리합시다.

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' );

설명: 이 문제의 원인은 설치된 플러그인 중 일부가 관리자 이외의 사용자가 wp-admin에 접속하려고 할 때 홈페이지 또는 임의의 페이지로 리다이렉트하기 때문입니다(http://localhost/project/wp-admin 등).이 때문에 문제가 발생합니다.

따라서 관리자가 아닌 사용자가 admin에 액세스하지 못하도록 리디렉션할 때 다음 코드를 사용할 수 있습니다.이것은 프런트엔드의 admin 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 );

조건을 바꾸다

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

더하다!is_ajax()

언급URL : https://stackoverflow.com/questions/9408334/wordpress-admin-ajax-results-in-error-302-redirect