Como verificar se estou em admin-ajax.php?

25

Agora, para meu plug-in, estou usando in_admin() para determinar se o usuário está no frontend do site ou na área de administração. No entanto, o problema ocorre quando plugins usam admin-ajax.php para processar solicitações ajax.

Eu preciso de uma maneira de registrar ganchos e plugins somente ao processar o arquivo admin-ajax.php ou no frontend do site. Qual é a melhor maneira de fazer isso?

    
por Extrakun 27.10.2012 / 19:27
fonte

3 respostas

57

Verifique a constante DOING_AJAX . Sua definição é o primeiro código de trabalho em wp-admin/admin-ajax.php . Alguns plugins muito estranhos, como o Jetpack, são que definem essa constante em lugares inesperados , então você pode incluir uma verificação para is_admin() também.

Exemplo:

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

Eu tenho solicitado uma maneira mais simples de verificar isso há muito tempo, e isso foi finalmente implementado em 4.7.0.

Portanto, para o WP 4.7 e superior, você pode usar:

if ( wp_doing_ajax() )
{
    // do something
}
    
por fuxia 27.10.2012 / 19:36
fonte
5

Boas notícias, a função está lá agora.

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: }

Só para recapitular, o admin-ajax.php define algo assim.

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: }
    
por prosti 15.12.2016 / 01:44
fonte
1

A solução Fuxias retorna false também para a solicitação ajax feita no painel de administração. Mas essas solicitações devem retornar true , porque os dados que você está solicitando são fornecidos para uma visualização de administrador. Para resolver esse problema, você pode usar a seguinte função:

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();
}
    
por GM_Alex 18.11.2017 / 22:14
fonte

Tags