Comment vérifier si je suis dans admin-ajax.php?

25

En ce moment, pour mon plugin, j’utilise in_admin() pour déterminer si l’utilisateur est dans l’interface du site ou dans la zone admin. Cependant, le problème survient lorsque les plugins utilisent admin-ajax.php pour traiter les requêtes ajax.

J'ai besoin d'un moyen d'enregistrer les points d'ancrage et les plugins uniquement lors du traitement du fichier admin-ajax.php ou dans l'interface du site. Quelle est la meilleure façon de s'y prendre?

    
posée Extrakun 27.10.2012 - 19:27

3 réponses

57

Vérifiez la constante DOING_AJAX . Sa définition est le premier code de travail dans wp-admin/admin-ajax.php . Certains plugins très étranges, comme Jetpack, sont , vous pouvez donc également inclure un contrôle pour is_admin() .

Exemple:

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

J'ai demandé un moyen plus simple de vérifier cela depuis longtemps, ce qui a finalement été mis en œuvre dans 4.7.0.

Donc, pour WP 4.7 et supérieur, vous pouvez utiliser:

if ( wp_doing_ajax() )
{
    // do something
}
    
réponse donnée fuxia 27.10.2012 - 19:36
5

Bonne nouvelle, la fonction est là maintenant.

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

Pour rappel, le admin-ajax.php définit quelque chose comme ceci.

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: }
    
réponse donnée prosti 15.12.2016 - 01:44
1

La solution Fuxias renvoie false également pour la demande ajax effectuée à partir du panneau d'administration. Mais ces demandes doivent renvoyer true , car les données que vous demandez sont fournies pour une vue administrateur. Pour résoudre ce problème, vous pouvez utiliser la fonction suivante:

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();
}
    
réponse donnée GM_Alex 18.11.2017 - 22:14

Lire d'autres questions sur les étiquettes