¿Cómo verificar si estoy en admin-ajax.php?

25

Ahora mismo para mi complemento, estoy usando in_admin() para determinar si el usuario está en la interfaz del sitio o en el área de administración. Sin embargo, el problema se produce cuando los complementos utilizan admin-ajax.php para procesar solicitudes ajax.

Necesito una forma de registrar enlaces y complementos solo cuando se procesa el archivo admin-ajax.php o en la interfaz del sitio. ¿Cuál es la mejor manera de hacerlo?

    
pregunta Extrakun 27.10.2012 - 19:27

3 respuestas

57

Comprueba la constante DOING_AJAX . Su definición es el primer código de trabajo en wp-admin/admin-ajax.php . Algunos complementos muy raros, como Jetpack, son , por lo que también puedes incluir un cheque para is_admin() .

Ejemplo:

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

He solicitado una forma más sencilla de verificar esto hace mucho tiempo, y esto finalmente se implementó en 4.7.0.

Por lo tanto, para WP 4.7 y superior puede usar:

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

Buenas noticias, la función está ahí ahora.

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

Solo para recapitular, el admin-ajax.php define algo como esto.

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

La solución de Fuxias devuelve false también para la solicitud de ajax realizada desde el panel de administración. Pero estas solicitudes deben devolver true , porque los datos que solicita se proporcionan para una vista de administrador. Para resolver este problema, puede utilizar la siguiente función:

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

Lea otras preguntas en las etiquetas