admin-ajax.php
tải wp-load.php
:
/** Load WordPress Bootstrap */
require_once( dirname( dirname( __FILE__ ) ) . '/wp-load.php' );
wp-load.php
tải wp-config.php
, và có wp-settings.php
tải.
Và ở đây chúng tôi tìm thấy điều này:
// 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' );
}
Vì vậy, có, chủ đề functions.php
được tải.
Có một ngoại lệ trong wp-settings.php
:
// Stop most of WordPress from being loaded if we just want the basics.
if ( SHORTINIT )
return false;
Khi SHORTINIT
được xác định là TRUE
sớm hơn, chủ đề sẽ không được tải.
Vì vậy, kiểm tra nếu SHORTINIT
là TRUE
vì một số lý do.
Một lỗi phổ biến khác là sử dụng sai is_admin()
. Điều này luôn TRUE
ở trong admin-ajax.php
, vì vậy những điều sau đây sẽ thất bại:
if ( ! is_admin() )
// register or execute AJAX stuff
Gỡ lỗi AJAX
Một phương pháp nguyên thủy là hiệu quả là sử dụng tiêu đề HTTP để gỡ lỗi AJAX.
Đây là một chức năng trợ giúp đơn giản:
function send_debug_header( $msg )
{
static $counter = 1;
header( "X-Debug-Ajax-$counter: $msg" );
$counter += 1;
}
Và plugin này cho thấy cách sử dụng nó:
<?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
}
Nó sẽ thêm một nút vào giao diện người dùng để kích hoạt yêu cầu AJAX khi được nhấp. Mở bảng điều khiển mạng của trình duyệt của bạn và xem các tiêu đề phản hồi cho yêu cầu: