내가 admin-ajax.php에 있는지 확인하는 방법?


27

현재 플러그인의 in_admin()경우 사용자가 사이트의 프런트 엔드 또는 관리 영역에 있는지 확인하는 데 사용하고 있습니다. 그러나 플러그인이 admin-ajax.phpajax 요청을 처리 하는 데 사용할 때 문제점이 발생 합니다.

admin-ajax.php파일을 처리 할 때나 사이트의 프런트 엔드 에서만 후크와 플러그인을 등록하는 방법이 필요합니다 . 그렇게하는 가장 좋은 방법은 무엇입니까?

답변:


61

상수를 확인하십시오 DOING_AJAX. 정의는의 첫 번째 작업 코드입니다 wp-admin/admin-ajax.php. Jetpack과 같은 매우 이상한 플러그인 은 예기치 않은 위치에 상수를 정의 하므로 검사도 포함 할 수 is_admin()있습니다.

예:

if ( is_admin() && defined( 'DOING_AJAX' ) && DOING_AJAX )
{
    // do something
}

나는 한 이를 확인하는 간단한 방법을 요구 오래 전에,이 마지막으로 4.7.0에서 구현되었다.

따라서 WP 4.7 이상의 경우 다음을 사용할 수 있습니다.

if ( wp_doing_ajax() )
{
    // do something
}

4
if ( defined( 'DOING_AJAX' ) )그 자체로 충분합니다. 상수는 설정되어 admin-ajax.php있으므로 값을 확인할 필요가 없습니다.
John Reid

5
@JohnReid 전역 상수이므로 누구나 등을 포함한 모든 값으로 설정할 수 있습니다 FALSE.
fuxia

좋은 지적. WP 코어에는이 값을 설정하는 곳이 없지만 일부 불량 플러그인이 false대신 설정하지 않을 수 있다고 생각하지 않습니다 . 당신을위한 +1입니다!
John Reid

1
그것은 코덱스 방식이지만 실제로 사람들이 테마에서 플래그를 설정하는 것을 보았 으므로이 솔루션은 아약스처럼 행동 해야하는지 알고 싶다면 좋지만 실제로 알고해야 할 경우에는 최선이 아닐 수도 있습니다 아약스 요청입니다.
Mark Kaplun

5

좋은 소식입니다. 기능이 지금 있습니다.

File: /wp-includes/load.php
1037: /**
1038:  * Determines whether the current request is a WordPress Ajax request.
1039:  *
1040:  * @since 4.7.0
1041:  *
1042:  * @return bool True if it's a WordPress Ajax request, false otherwise.
1043:  */
1044: function wp_doing_ajax() {
1045:   /**
1046:    * Filters whether the current request is a WordPress Ajax request.
1047:    *
1048:    * @since 4.7.0
1049:    *
1050:    * @param bool $wp_doing_ajax Whether the current request is a WordPress Ajax request.
1051:    */
1052:   return apply_filters( 'wp_doing_ajax', defined( 'DOING_AJAX' ) && DOING_AJAX );
1053: }

간단히 말하자면, admin-ajax.php정의는 이와 같은 것을 정의합니다.

File: /wp-admin/admin-ajax.php
11: /**
12:  * Executing Ajax process.
13:  *
14:  * @since 2.1.0
15:  */
16: define( 'DOING_AJAX', true );
17: if ( ! defined( 'WP_ADMIN' ) ) {
18:     define( 'WP_ADMIN', true );
19: }

업데이트 해 주셔서 감사합니다! 4.7 릴리스 노트에서 그 중 하나를 놓쳤습니다.
Tom Auger

안녕 @TomAuger, 멋지다. 이 함수는 아약스의 Michael Jordan입니다. 감사합니다 23
prosti

1

Fuxias 솔루션은 false관리자 패널에서 작성된 아약스 요청에도 반환 됩니다. 그러나 true요청한 데이터가 관리자보기에 제공되므로 이러한 요청은을 (를) 반환해야 합니다. 이 문제를 해결하려면 다음 기능을 사용할 수 있습니다.

function saveIsAdmin() {
    //Ajax request are always identified as administrative interface page
    //so let's check if we are calling the data for the frontend or backend
    if (wp_doing_ajax()) {
        $adminUrl = get_admin_url();
        //If the referer is an admin url we are requesting the data for the backend
        return (substr($_SERVER['HTTP_REFERER'], 0, strlen($adminUrl)) === $adminUrl);
    }

    //No ajax request just use the normal function
    return is_admin();
}

0

DOING_AJAX 당신이 있는지 지속적으로 확인 admin-ajax.php

if ( is_admin() && defined( 'DOING_AJAX' ) && DOING_AJAX )
{
    // do something
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.