2017-01-10 9 views
1

Это было задано раньше, но я пробовал много всего, чтобы заставить его работать, и я не знаю, чего мне не хватает. У меня есть каталог членов сайта Wordpress, который использует Ajax для вызова и отображения профилей членов. Он также позволяет сортировать их по алфавиту по имени. Оба работают безупречно при входе в систему, но при выходе из системы возвращается «0». Я тестировал его с несколькими учетными записями с разными разрешениями, и, пока один из них вошел в систему с любой учетной записью, он работает нормально.Wordpress AJAX возвращает 0, когда пользователь не вошел в систему

У меня есть и

add_action('wp_ajax_nopriv_load-filter', 'load_members'); 

и

add_action('wp_ajax_load-members', 'load_members'); 

добавил, что я прочитал должен сделать его работать как в системе и не зарегистрированных пользователей. Я предполагаю, что пользователи, которые не вошли в систему, не могут получить доступ к чему-то существенному для работы Ajax, возможно, к файлу ajax-admin.php, о котором я продолжаю читать, но любые исправления, которые я пробовал, ничего не делают.

Я пробовал отлаживать хром (F12, проверять сеть на наличие ошибок и т. Д.) И не нашел полезной информации. Я также добавил строки console.log() в различные части моего кода, чтобы определить, вызывался ли он, и все они вызываются как ожидалось, вошли в систему или вышли из системы.

во всяком случае, вот мой код из functions.php (не включая add_action части):

 function load_members() 
      { 

       $letter = $_POST[ 'letter' ]; 

        if($letter == "all") { 

         $args = array(
          'role' => 'Subscriber',); 

          $user_query = new WP_User_Query($args); 

          ob_start(); 

          global $user; 

          if (!empty($user_query->results)) { 
          foreach ($user_query->results as $user) { 
          get_template_part('template', 'directory'); 
         } 
           } else { 
       echo '<div class="center" >No users found.</div>';} 
       $response = ob_get_contents(); 
        ob_end_clean(); 

        echo $response; 

        die(1); 

А вот функция от моей страницы каталога:

function members_get(catID) { 
jQuery("a.ajax").removeClass("current"); 
jQuery("#category-post-content").fadeOut(); 
$('.' + catID).addClass("current"); //adds class current to the menu item being displayed so you can style it with css 
jQuery("#loading-animation").show(); 
var ajaxurl = '<?php echo admin_url('admin-ajax.php'); //must echo it?>'; 
console.log(ajaxurl); 
jQuery.ajax({ 
type: 'POST', 
url: ajaxurl, 
data: {"action": "load-members", letter: catID }, 
success: function(response) { 
jQuery("#category-post-content").fadeIn(); 
jQuery("#category-post-content").html(response); 
jQuery("#loading-animation").hide(); 
return false; 

} 

Извинения для форматирования на секция functions.php; это было странно, и я попытался это исправить. Кто-нибудь знает, что происходит?

ответ

5

Проблема с вашими звонками add_action.

add_action('wp_ajax_nopriv_load-filter', 'load_members'); 
add_action('wp_ajax_load-members', 'load_members'); 

Вы правы, полагая, что вам нужно как wp_ajax_(action) и wp_ajax_nopriv_(action). (action) должны быть одинаковыми для обоих.

Обновление:

add_action('wp_ajax_nopriv_load-members', 'load_members'); 
add_action('wp_ajax_load-members', 'load_members'); 
+1

Спасибо, это была проблема. Мне потребовалось много времени, чтобы решить такую ​​небольшую проблему! –

Смежные вопросы