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
'source' 카테고리의 다른 글
| 리액션 라우터 포함 스토리북 - 외부 사용 금지 (0) | 2023.03.06 |
|---|---|
| Tymeleaf: 변수가 정의되어 있는지 확인합니다. (0) | 2023.03.06 |
| Nodejs/Express용 Mongodb 드라이버와 함께 Mongodb를 직접 사용하는 대신 Mongoose ODM을 사용해야 하는 이유는 무엇입니까? (0) | 2023.03.06 |
| mongoose 접속 오류 콜백이 발생합니까? (0) | 2023.03.06 |
| 지시어의 '말단'을 어떻게 이해합니까? (0) | 2023.03.06 |