अगर मैं एडमिन- ajax.php में हूं तो कैसे जांच करूं?


27

अभी मेरे प्लगइन के लिए, मैं in_admin()यह निर्धारित करने के लिए उपयोग कर रहा हूं कि उपयोगकर्ता साइट के सामने या व्यवस्थापक क्षेत्र में है। हालाँकि, समस्या तब होती है जब प्लगइन्स admin-ajax.phpajax अनुरोधों को संसाधित करने के लिए उपयोग करते हैं।

मुझे केवल हुक या प्लग को पंजीकृत करने के लिए एक तरीका चाहिए, जब admin-ajax.phpफ़ाइल को संसाधित करना या साइट के दृश्य में। ऐसा करने का सबसे अच्छा तरीका क्या है?

जवाबों:


61

निरंतर जांच करें DOING_AJAX। इसकी परिभाषा में पहला काम करने वाला कोड है wp-admin/admin-ajax.php। जेटपैक जैसे कुछ बहुत ही अजीब प्लगइन्स अनपेक्षित स्थानों में उस स्थिरांक को परिभाषित कर रहे हैं , इसलिए आप एक चेक भी शामिल कर सकते हैं 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कि आपको मूल्य की जाँच करने की आवश्यकता न हो।
जॉन रीड

5
@ जॉनराइड यह एक वैश्विक स्थिरांक है, कोई भी इसे किसी भी मूल्य पर सेट कर सकता है, जिसमें शामिल हैं FALSE
FUXIA

अच्छी बात। WP कोर में कहीं भी ऐसा नहीं है जो इस मान को सेट करता है, लेकिन मुझे लगता है कि इसका मतलब यह नहीं है कि कुछ दुष्ट प्लगइन इसे falseइसके बजाय सेट नहीं कर सकते हैं । आपके लिए एक +1, सर!
जॉन रीड

1
यह कोडेक्स तरीका है, लेकिन व्यवहार में मैंने लोगों को उनके विषय में उस ध्वज को स्थापित करते हुए देखा, इसलिए यह समाधान अच्छा है यदि आप जानना चाहते हैं कि क्या आपको ऐसा व्यवहार करना चाहिए जैसे कि यह अजाक्स है, लेकिन सबसे अच्छा नहीं हो सकता है यदि आपको वास्तव में जानना चाहिए यह अजाक्स अनुरोध है।
मार्क कप्लून

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 रिलीज नोटों में से एक याद आया।
टॉम ऑगर

अरे @TomAuger, कूल। यह समारोह अजाक्स का माइकल जॉर्डन है। धन्यवाद 23
प्रोस्टी

1

falseव्यवस्थापक पैनल से किए गए ajax अनुरोध के लिए भी फॉक्सियस समाधान रिटर्न । लेकिन इन अनुरोधों को वापस आ जाना चाहिए 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
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.