WordPress Ajax从functions.php返回完整的html页面,而不是echo

我正在使用wordpress ajax调用从wordpress主题functions.php中的函数返回简单内容。 但是,将返回完整的html页面。

这是ajax调用

  jQuery(document).ready(function(){ jQuery("#beg_golf_course").change(function() { //do this when course changes //in WordPress ajaxurl always points to admin-ajax.php var ajaxurl = ''; var course_id = 4; //Do the ajax jQuery.ajax({ type: "POST", url: ajaxurl, //NOTE - the action parameter calls the function in functions.php data: { action: 'select_course_aj', course_id: course_id, _ajax_nonce: '' }, //display alert on success success: function(html){ alert(html); } }); //close jQuery.ajax( return false; }); });  

这是functions.php中的函数

 function select_course_func(){ echo $_POST["course_id"]; die(); } add_action('wp_ajax_select_course_aj','select_course_func'); 

包含jquery ajax调用的页面的HTML实际上显示在alert而不是echo中。

那里的任何天才都能告诉我为什么?

谢谢马克

好的,问题解决了。 看看我上面的3条评论加上……

!defined(’DOING_AJAX’)是一个常量,可用于测试用户未执行ajax请求。 我将此与我的逻辑相结合,将非管理员重定向到前端,现在可以正常工作了。

 /* check the role of current loged in user for redirection */ add_action('admin_init','rt_checkRole'); function rt_checkRole() { global $wp_roles; $currentrole =''; foreach ( $wp_roles->role_names as $role => $name ) { if ( current_user_can( $role ) ){ $currentrole = $role; } } if(!defined('DOING_AJAX') && (!$currentrole || ($currentrole != 'administrator' && $currentrole != 'editor'))){ wp_redirect (site_url().'/front-end-login/'); } } 

在https://wordpress.stackexchange.com/questions/26100/redirect-out-of-wp-admin-without-losing-admin-ajax-php找到了!!(’DOING_AJAX’)

感谢所有评论的人。

如果你想为非管理员用户做ajax调用你应该使用下面的代码,这将禁止非管理员用户的wp-admin访问,但允许每个用户,登录或注销用户的ajax调用

 function my_admin_init(){ if( !defined('DOING_AJAX') && !current_user_can('administrator') ){ wp_redirect( home_url() ); exit(); } } add_action('admin_init','my_admin_init');