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
AJAX डिबगिंग
AJAX को डिबग करने के लिए 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 अनुरोध को ट्रिगर करता है। अपने ब्राउज़र का नेटवर्क कंसोल खोलें और अनुरोध के लिए प्रतिक्रिया शीर्षकों को देखें: