কোন এজেএক্স কল চলাকালীন ফাংশন.এফপি ফাইলটি কখনও কল করা যায়? ডিবাগ এজেএক্স


23

কোনও সহযোগী প্রোগ্রামার যে সমস্যাটি পেয়েছে তা বের করার চেষ্টা করছে। আমি ভাবছিলাম যে functions.phpআপনি যখন অ্যাডমিন সাইড এজেএক্স করবেন তখন ফাইলটি আদৌ কল করা হবে কিনা ? আমি জানি যে আপনি যখন একটি এজেএক্স কল করেন তখন ডাব্লুপি এর একটি অংশ লোড হয়ে যায় কলটি প্রক্রিয়া করার জন্য এবং প্রতিক্রিয়াটি ফেরত পাঠাতে। functions.phpফাইলটি কি এতে অন্তর্ভুক্ত রয়েছে?

আমি জিজ্ঞাসার কারণটি হ'ল তিনি মেটা-বক্স` প্লাগইন থেকে ক্লাসটি ব্যবহার করছেন এবং পরিবর্তে থিমের অংশ হিসাবে এটি লোড করছেন। এই শ্রেণিতে কিছু AJAX রয়েছে যা কেবল খালি প্রতিক্রিয়া দেখায় এবং আমি মনে করি এটি কারণ কারণ প্রতিক্রিয়াটি পরিচালনা করে এমন কোড লোড হয় না। ডাব্লুপি যখন এজেএক্স পরিচালনা করে তখন কী লোড হয় তার কোনও ডকুমেন্টেশন আছে?

উত্তর:


28

admin-ajax.phpবোঝা wp-load.php:

/** Load WordPress Bootstrap */
require_once( dirname( dirname( __FILE__ ) ) . '/wp-load.php' );

wp-load.phpবোঝা wp-config.php, এবং সেখানে বোঝা আছে wp-settings.php

এবং এখানে আমরা এটি পাই:

// Load the functions for the active theme, for both parent and child theme if applicable.
if ( ! defined( 'WP_INSTALLING' ) || 'wp-activate.php' === $pagenow ) {
    if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( STYLESHEETPATH . '/functions.php' ) )
        include( STYLESHEETPATH . '/functions.php' );
    if ( file_exists( TEMPLATEPATH . '/functions.php' ) )
        include( TEMPLATEPATH . '/functions.php' );
}

সুতরাং, হ্যাঁ, থিমটি functions.phpলোড হয়েছে।


এর মধ্যে একটি ব্যতিক্রম রয়েছে wp-settings.php:

// Stop most of WordPress from being loaded if we just want the basics.
if ( SHORTINIT )
    return false;

যখন SHORTINITহিসাবে সংজ্ঞায়িত করা হয় TRUEআগে, থিম লোড করা হবে না।

সুতরাং কোনও কারণে আছে কিনা SHORTINITতা পরীক্ষা করে দেখুন TRUE


অন্য একটি সাধারণ ত্রুটি হল এর ভুল ব্যবহার is_admin()। এটি সর্বদা TRUEথাকে admin-ajax.php, সুতরাং নিম্নলিখিতগুলি ব্যর্থ হবে:

if ( ! is_admin() )
    // register or execute AJAX stuff

ডিবাগিং এজেএক্স

দক্ষ হিসাবে আদিম একটি পদ্ধতি হ'ল এজেএক্স ডিবাগ করতে HTTP শিরোনাম ব্যবহার করা।

এখানে একটি সাধারণ সহায়ক কার্য রয়েছে:

function send_debug_header( $msg )
{
    static $counter = 1;
    header( "X-Debug-Ajax-$counter: $msg" );
    $counter += 1;
}

এবং এই প্লাগইনটি এটি কীভাবে ব্যবহার করতে হয় তা দেখায়:

<?php # -*- coding: utf-8 -*-
/**
 * Plugin Name: Debug AJAX per HTTP
 * Description: Look at the HTTP headers in your browser's network console
 */

// The constant is already defined when plugins are loaded.
// Prove we have been called.
if ( defined( 'DOING_AJAX' ) && DOING_AJAX )
    send_debug_header( 'File "' . __FILE__ . '" was called on an AJAX request.' );

function send_debug_header( $msg )
{
    static $counter = 1;
    header( "X-Debug-Ajax-$counter: $msg" );
    $counter += 1;
}

add_action( 'wp_ajax_debug_test',        't5_debug_test' );
add_action( 'wp_ajax_nopriv_debug_test', 't5_debug_test' );

function t5_debug_test()
{
    $in = is_user_logged_in() ? '' : 'not ';
    send_debug_header( 'Function "' . __FUNCTION__ . '" was called and the user is ' . $in . 'logged in.' );
    print_r( debug_backtrace() );
    die(1);
}

add_action( 'wp_enqueue_scripts', 't5_enqueue_jquery' );

function t5_enqueue_jquery()
{
    wp_enqueue_script( 'jquery' );
}
add_action( 'wp_footer', 't5_debug_ajax_test_button', 0 );

function t5_debug_ajax_test_button()
{
    ?>
<input type="submit" id="t5debugajax" value="Debug AJAX">
<script>
jQuery( function($){
    var sendFeedBack = function( response ){
        console.log( response );
    };
    $("#t5debugajax").on("click", function(){
        $.post(
            "<?php echo admin_url( 'admin-ajax.php' ); ?>",
            {
                action: "debug_test"
            },
            sendFeedBack
        );
    });
});
</script>
    <?php
}

এটি সামনের প্রান্তে একটি বোতাম যুক্ত করবে যা ক্লিক করার সাথে AJAX অনুরোধটি ট্রিগার করে। আপনার ব্রাউজারের নেটওয়ার্ক কনসোলটি খুলুন এবং অনুরোধের জন্য প্রতিক্রিয়া শিরোনামগুলি দেখুন:

এখানে চিত্র বর্ণনা লিখুন


যথারীতি বিস্তারিত, @ টসচো। কোডটি আপনার শেষের দিকে ঠিকঠাক হয়ে গেলে তবে অন্য কারও পক্ষে নয়, এটি ডিবাগ করা শক্ত। সমস্যার পুনরুত্পাদন বলে মনে হচ্ছে না তবে আপনার উত্তর সম্ভবত আমাকে সঠিক দিকে পাঠাবে।
ম্যানি ফ্লুরমন্ড

@ ম্যানিফ্লুরমন্ড আমি একটি ডিবাগ সহায়ক প্লাগইন যুক্ত করেছি। সমস্যা সমাধানে এটির সহায়তা করা উচিত।
ফুসিয়া

9
ম্যান, আপনি পুরোপুরি :)
ম্যানি ফ্লুরমন্ড

TEMPLATEPATH? ;)
কায়সার

1

আমি ধরে নিয়েছি আপনার সমস্যাটি ছিল আজেএক্স যদি কাজ করে যাচ্ছিল যদি আপনি লগইন হয়ে থাকেন এবং এটি লগ-আউট স্থিতিতে কাজ না করে, তাই না?
লগ-ইন না করা ব্যবহারকারীদের জন্য এজেএক্স-ভিত্তিক ফাইল অ্যাক্সেস করার জন্য ওয়ার্ডপ্রেসে একটি ফাংশন রয়েছে: wp_ajax_noprivউদাহরণস্বরূপ

/* works for logged users */
add_action( 'wp_ajax_my_action', 'my_action_callback');

/* works for non logged users */
add_action( 'wp_ajax_nopriv_my_action', 'my_action_callback');
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.