আমি অ্যাডমিন- ajax.php এ আছি কিনা তা কীভাবে পরীক্ষা করবেন?


27

এই মুহূর্তে আমার প্লাগইনটির জন্য, আমি in_admin()নির্ধারণ করতে ব্যবহার করছি যে ব্যবহারকারী সাইটের সম্মুখভাগে বা প্রশাসক অঞ্চলে আছে কিনা। যাইহোক, যখন প্লাগইনগুলি admin-ajax.phpএজ্যাক্স অনুরোধগুলি প্রক্রিয়া করতে ব্যবহার করে তখন সমস্যাটি দেখা দেয়।

আমার কেবলমাত্র 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 এ কার্যকর করা হয়েছিল।

সুতরাং ডাব্লুপিপি 4.7 এবং উচ্চতর জন্য আপনি ব্যবহার করতে পারেন:

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

4
if ( defined( 'DOING_AJAX' ) )নিজেই যথেষ্ট। ধ্রুবকটি কেবলমাত্র এতে সেট করা থাকে admin-ajax.phpযাতে আপনার কোনও মান পরীক্ষা করার প্রয়োজন হয় না।
জন রেড

5
@ জোহানরিড এটি একটি বিশ্বব্যাপী ধ্রুবক, যে কেউ এটিকে যে কোনও মূল্যে সেট করতে পারে FALSE
ফুসিয়া

ভাল যুক্তি. এই মানটি নির্ধারণ করে এমন ডাব্লুপি কোরে কোথাও নেই তবে আমি মনে করি এটির অর্থ এই নয় যে কিছু দুর্বৃত্ত প্লাগইন এটি 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: }

আপডেটের জন্য ধন্যবাদ! আমি এটি ৪. release রিলিজ নোটের মধ্যে মিস করেছি।
টম অগার

আরে @ টমএগার, দুর্দান্ত। এই ফাংশনটি অজ্যাক্সের মাইকেল জর্ডান। ধন্যবাদ 23
প্রেস্টি

1

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.