2017-01-10 2 views
1

Dies wurde schon einmal gefragt, aber ich habe eine Menge Zeug ausprobiert, um es funktionieren zu lassen, und ich weiß nicht, was ich vermisse. Ich habe ein Mitgliederverzeichnis für eine Wordpress-Site, die Ajax verwendet, um Mitgliederprofile aufzurufen und anzuzeigen. Sie können sie auch alphabetisch nach Namen sortieren. Beide funktionieren einwandfrei, wenn sie eingeloggt sind, aber wenn sie ausgeloggt sind, geben sie '0' zurück. Ich habe es mit mehreren Konten mit verschiedenen Berechtigungen getestet, und solange man mit einem Konto angemeldet ist, funktioniert es gut.Wordpress AJAX gibt 0 zurück, wenn der Benutzer nicht eingeloggt ist

Ich habe beide

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

und

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

hinzugefügt, die ich gelesen habe, sollte es sowohl in als auch nicht eingeloggte Benutzer angemeldet arbeiten. Ich nehme an, dass Benutzer, die nicht eingeloggt sind, nicht auf etwas zugreifen können, das für Ajax wichtig ist, möglicherweise die ajax-admin.php-Datei, über die ich lese, aber alle Fehler, die ich versucht habe, tun nichts.

Ich habe versucht, das Debuggen in Chrom (F12, überprüfen Sie das Netzwerk auf Fehler, etc) und fand keine hilfreichen Informationen. Ich habe auch console.log() -Zeilen zu verschiedenen Teilen meines Codes hinzugefügt, um zu bestimmen, ob er aufgerufen wurde, und alle werden wie erwartet aufgerufen, eingeloggt oder raus.

wie auch immer, hier ist mein Code von functions.php (ohne den add_action Teil):

 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); 

Und hier ist die Funktion von meiner Verzeichnisseite:

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; 

} 

Apologies für die Formatierung auf dem functions.php Abschnitt; es klebte seltsam und ich versuchte es zu beheben. Hat jemand eine Idee was los ist?

Antwort

5

Das Problem ist mit Ihren Anrufen add_action.

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

Sie sind richtig in das Denken Sie beide wp_ajax_(action) und wp_ajax_nopriv_(action) benötigen. (action) sollte für beide identisch sein.

Update:

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

Dank, das war das Problem. Es hat lange gedauert, ein so kleines Problem zu lösen! –

Verwandte Themen