Я использую вызов wordpress ajax для возврата простого содержимого из функции в wordpress theme functions.php. Однако вместо этого возвращается полная html-страница.
Вот вызов ajax
<?php $ajax_nonce = wp_create_nonce("iwhq_beginner_select_course"); ?> <script type="text/javascript" language="javascript"> 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 = '<?php echo admin_url('admin-ajax.php'); ?>'; 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: '<?php echo $ajax_nonce; ?>' }, //display alert on success success: function(html){ alert(html); } }); //close jQuery.ajax( return false; }); }); </script>
И это функция в functions.php
function select_course_func(){ echo $_POST["course_id"]; die(); } add_action('wp_ajax_select_course_aj','select_course_func');
HTML-страница, содержащая вызов jquery ajax, фактически отображается в предупреждении вместо эха.
Любые гении могут мне сказать почему?
Спасибо, Марк
Хорошо, проблема решена. Смотрите мои последние 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/'); } }
Обнаружено около! Определено («DOING_AJAX») на странице https://wordpress.stackexchange.com/questions/26100/redirect-out-of-wp-admin-without-losing-admin-ajax-php
Спасибо всем, кто прокомментировал.
Если вы хотите сделать 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');